Java连接数据库、进行操作的过程主要是:
1、加载驱动
2、获得连接
3、准备语句
4、执行、结果处理
5、收尾处理,比如关闭连接、结果集
demo:
Connection con=null;
if(con==null)
{
System.out.println("test开始连接数据库");
try { //加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
}catch(Exception e){
e.printStackTrace();
System.out.println("加载MYSQL数据库驱动失败!");
}
try{
String url="jdbc:mysql://localhost:3306/databsename?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
String user="root";
String password="password";
con=DriverManager.getConnection(url,user,password);
System.out.println("连接到数据库success");
Statement sql = null;
ResultSet rs=null;
sql = con.createStatement();
String sqlstate = "select start_time from everyday where id='0000'";
rs = sql.executeQuery(sqlstate);
String lastDate = null;
while(rs.next()){
lastDate = rs.getString("start_time");
}
rs.close();
sql.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
加载驱动和获得连接阶段几乎没有差别,有差别的地方主要在准备语句和执行、结果处理阶段。
假设获得的连接对象为conn,在最通用的情况,
Statement sql = conn.createStatement();
ResultSet rs=sql.executeQuery("select start_time from everyday where id='0000'");
即可完成与数据库的交互,将我们想获得的数据存贮在rs
中,后续进行处理即可。
但是,我们对数据库不仅仅进行查询,同时需要更新,此时就需要更换执行方式了,上面使用的是executeQuery(),如果是单纯的更新,我们使用excuteUpdate()就可以,此时返回值是受影响条数。但执行更新数据时,会遇到SQL注入的问题,此时我们不再使用createStatement()来准备语句,而是使用prepareStatement()来准备语句:
PreparedStatement pr1 = conn.prepareStatement("INSERT INTO everyday (id,start_time) VALUES (?, ?)");
pr1.setString(1,"0000");pr1.setString(2, today);
pr1.executeUpdate();
然后使用setString 等方法来设置参数,以此避免SQL注入,提高性能,理清程序逻辑。
[参考]表名也不确定用PreparedStatement 可以吗? [问题点数:100分]
[参考]Java数据库连接PreparedStatement的使用详解
[参考]PreparedStatement 使用
[参考]executeUpdate()方法的使用
[参考]PreparedStatement
[参考]prepareStatement的用法和解释
[参考]PreparedStatement效率为什么高/为什么要使用PreparedStatement代替Statement
[参考]statement 、prepareStatement的用法和解释
[参考]JDBC中executeQuery、executeUpdate和execute之间的区别
[参考]
网友评论