Model View Control
MySqlPrepare(把数据库的连接单独创建一类)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class MySqlPrepare {
private Connection conn;
private static MySqlPrepare manager;
public static MySqlPrepare newInstance(){
if(manager==null){
//如果没有创建对象,则创建一个,如果已经创建了就直接返回,保证只有一个类的实例
manager=new MySqlPrepare();
}
//返回本实例的一个对象
return manager;
}
private MySqlPrepare(){
try {
// 从保重加载驱动
Class.forName("com.mysql.jdbc.Driver"); // 加载MYSQL JDBC驱动程序
// Class.forName("org.gjt.mm.mysql.Driver");
System.out.println("Success loading Mysql Driver!");
// 建立连接,加database的名字,加入用户名密码
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/clazz", "root", "123456");
// URL:连接URL为 jdbc:mysql//服务器地址/数据库名
// ,user:后面的2个参数分别是登陆用户名和password:密码
// 用连接去增删改查
}catch (Exception e) {
System.out.print("Error loading Mysql Driver!");
e.printStackTrace();
}
}
public Connection getConn() {
return conn;
}
public void setConn(Connection conn) {
this.conn = conn;
}
}
MysqlOprate (数据库的操作单独创建一类)
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MysqlOprate {
private static MysqlOprate oprate;
private MysqlOprate(){
}
/**
* 单例设计模式
* @return 只能创建一个对象
*/
private static synchronized MysqlOprate newInstance(){
if(oprate==null){
oprate=new MysqlOprate();
}
return oprate;
}
/**
*
* @param name 传入要查询的用户名
* @param pass 传入要查询的用户名密码
* @return 如果用户名密码都匹配,则返回true,否则返回false
*/
public boolean signIn(String name,String pass){
Connection connect=MySqlPrepare.newInstance().getConn();
try {
if (!connect.isClosed()) {
PreparedStatement prepare= connect.prepareStatement("select * from user where user_name=? and user_word=?");
prepare.setString(1, name); //对占位符设置值,占位符顺序从1开始,第一个参数是占位符的位置,第二个参数是占位符的值。
prepare.setString(2, pass);
ResultSet set= prepare.executeQuery();
set.last();
int num=set.getRow();//另一种方法
return num==1;
} else {
System.out.println("请与数据库建立连接");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
在其他程序中使用时创建另一个类
事务
银行ATM取款
输入金额->服务器->播放录音->打开取钱口->吐钱->拿钱走
写一个事务,数据库连接默认每一条语句都是一个事务,会单独执行,首先设置connection不自动提交,最后一起提交,若其中的一条出错,则之前执行的语句都撤销。
Connection conn=MySqlPrepare.newInstance().getConn();
String str1="insert into user (user_name,user_word)values('zhangsan1','12346')";
String str2="insert into user (user_name,user_word)values('zhangsan2','12346')";
String str3="insert into user (user_names,user_word)values('zhangsan3','12346')";
String str4="insert into user (user_name,user_word)values('zhangsan4','12346')";
try {
Statement state=conn.createStatement();
//把默认的每条语句都是一条事务关闭,然后
conn.setAutoCommit(false);
state.ececute(str1);
state.execute(str2);
state.execute(str3);
state.execute(str4);
conn.commit();
//用这几条语句可以增加效率
"
Statement state=conn.createStatement();
conn.setAutoCommit(false);
state.addBatch(str1);
state.addBatch(str2);
state.addBatch(str3);
state.addBatch(str4);
state.executeBatch();
"
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}