import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MySqlJDBCDemo {
//加载数据库驱动
final static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//设置参数
final static String URL = "jdbc:mysql://localhost:3306/shop"; //“shop”为对应数据库名
final static String USER = "root"; //“root”为对应用户名
final static String PASSWORD = "****"; //“****”为对应密码
//在实际开发中,上面的参数应设置在配置文件中
public static void main(String[] args) {
//把连接等在这里定义,为了最后关闭资源的时候能判断是否为空
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//加载驱动
Class.forName(JDBC_DRIVER);
//获取连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
//创建一个执行对象Statement
stmt = conn.createStatement();
//定义SQL语句
String sql = "select * from user";
//执行SQL语句
rs = stmt.executeQuery(sql);
//遍历结果
while(rs.next()){
//获取用户id,getInt 方法代表获取的值是int类型的
System.out.print("用户id" + rs.getInt("uid"));
//获取用户名,getString 方法代表获取的值是String类型的
System.out.println("用户名" + rs.getString("username"));
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
//关闭资源
try {
//关闭前先判断是存在
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
通常我们使用PreparedStatement 代替Statement,因为PreparedStatement 是预编译的,比Statement 速度快,而且代码的可读性和可维护性更强,安全性更高。
但是用PreparedStatement 来代替Statement 会使代码多出几行,初学者入门时可能会有疑惑。
下面是PreparedStatement 对比的示例
//用Statement执行
//定义sql语句,“col”和“var”分别代表键和值
String sql = "insert into tb_name(col1,col2,col2,col4) values('"+var1+"','"+var2+"',"+var3+",'"+var4+"')";
//执行sql语句
stmt.executeUpdate(sql);
//用PreparedStatement执行
//定义sql语句
String sql = "insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)";
perstmt = con.prepareStatement(sql);
//设置参数,1 代表第一个问号,依此类推
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate();