JAVA数据库的操作(增、删、改、查)
JAVA数据库的操作(增、删、改、查)一、首先与数据库建立连接二、数据库的增、删、改、查1.增①首先我们编写SQL语句②预编译③设置占位符的值④执行⑤完整代码2.删3.改4.查①首先我们编写SQL语句②创建Statement对象用于执行SQL语句③执行SQL语句④遍历结果集⑤完整代码一、首先与数据库建立连接static Connection con; //声明了一个全局变量方便使用public s
JAVA数据库的操作(增、删、改、查)
一、首先与数据库建立连接
static Connection con; //声明了一个全局变量方便使用
public static void SQLConnect() {
try {
Class.forName("com.mysql.jdbc.Driver"); //加载数据库驱动
String url="jdbc:mysql://localhost:3306/*****?autoReconnect=true&useSSL=false"; //*****位置填写数据库的名字
String usename="root"; //数据库用户名
String psw="root"; //数据库密码
con = DriverManager.getConnection(url,usename,psw); //建立连接
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
具体步骤参考这个链接
https://blog.csdn.net/weixin_44652589/article/details/117999530
二、数据库的增、删、改、查
1.增
PreparedStatement继承自Statement,都是接口。这里我们推荐使用PreparedStatement,来执行数据库的增加操作,而不用Statement。
因为PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高。
PreparedStatement 是一个特殊的Statement对象,如果我们只是来查询或者更新数据的话,最好用PreparedStatement代替Statement,因为它有以下有点:
1.简化Statement中的操作
2.提高执行语句的性能
3.可读性和可维护性更好
4.安全性更好。
5.使用PreparedStatement能够预防SQL注入攻击,所谓SQL注入,指的是通过把SQL命令插入到Web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器,达到执行恶意SQL命令的目的。注入只对SQL语句的编译过程有破坏作用,而执行阶段只是把输入串作为数据处理,不再需要对SQL语句进行解析,因此也就避免了类似select * from user where name=‘aa’ and password=‘bb’ or 1=1的sql注入问题的发生。
①首先我们编写SQL语句
String insertSQL = "insert into stubase(id,name,sex,dep,math,eng) values (?,?,?,?,?,?)";
②预编译
PreparedStatement stat = con.prepareStatement(insertSQL);
③设置占位符的值
需要设置整形数据就使用setInt()方法。
需要设置字符串数据就使用setString()方法。
方法中的第一个参数是第几个占位符,从1开始。
stat.setInt(1,100);
stat.setString(2,"String");
stat.setString(3,"String");
stat.setString(4,"String");
stat.setInt(5,100);
stat.setInt(6,100);
④执行
stat.executeUpdate();
⑤完整代码
try {
String insertSQL = "insert into stubase(id,name,sex,dep,math,eng) values (?,?,?,?,?,?)";
PreparedStatement stat = con.prepareStatement(insertSQL);
stat.setInt(1,100);
stat.setString(2,"String");
stat.setString(3,"String");
stat.setString(4,"String");
stat.setInt(5,100);
stat.setInt(6,100);
stat.executeUpdate();
System.out.println(con);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2.删
与上述同理,首先我们编写SQL语句
然后创建Statement对象(也可以用PreparedStatement,这里演示一下Statement的使用)
最后执行。
String deleteSQL = "delete from stubase where id=18000";
Statement stmt = con.createStatement();
stmt.executeUpdate(deleteSQL);
3.改
这里仍然使用的是PreparedStatement,但是我在写SQL语句时没有使用占位符,而是使用了转义字符,两者都可以,我本人也认为占位符比较方便,这里只是演示转义字符的使用。
try {
String sql="update stubase set "
+ "name=\'"+s.getName()
+"\',sex=\'"+s.getSex()
+"\',dep=\'"+s.getDep()
+"\',math="+s.getMath()
+",eng="+s.getEng()+" "
+"where id="+s.getId();
PreparedStatement stat = con.prepareStatement(sql);
stat.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
4.查
查相对比较麻烦,增、删、改执行后的返回值位受影响的行数,而查询操作则会返回一张数据表。要对这张数据表进行操作,来获取值。
①首先我们编写SQL语句
这里我们查询全部
String sql = "select * from stubase";
②创建Statement对象用于执行SQL语句
Statement stmt = con.createStatement();
③执行SQL语句
ResultSet res = stmt.executeQuery(sql);
④遍历结果集
res初始指向查询到的数据表的第一行的上一行。
res.next()会使指针移动至下一行,它的返回值位布尔类型(boolean)。如果下一行有数据那么返回值位true,否则为false。
获取整形数据就使用getInt()方法。
获取字符串数据就使用getString()方法。
方法中的参数是查询到的结果表的第几列,依旧从1开始。.
可以在while循环中对获取的数据进行操作,例如添加到ArrayList中,方便我们的使用。
while(res.next()) {
int id = res.getInt(2);
String name = res.getString(3);
String sex = res.getString(4);
String dep = res.getString(5);
int math = res.getInt(6);
int eng = res.getInt(7);
}
⑤完整代码
String sql = "select * from stubase";
Statement stmt = con.createStatement();
ResultSet result = stmt.executeQuery(sql);
while(res.next()) {
int id = res.getInt(2);
String name = res.getString(3);
String sex = res.getString(4);
String dep = res.getString(5);
int math = res.getInt(6);
int eng = res.getInt(7);
}
三、总结
我们既可以用Statement,也可以用PreparedStatement。
使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
PreparedStatement可以使用占位符。
1、对于Statement
1.执行查询操作时使用executeQuery(String sql),返回值为Resultset 类型。
Resultset res = executeQuery(String sql) ;
2.执行增、删、改操作时使用executeUpdate(String sql) ,返回值是整形,意义为受影响的行数。
int res = executeUpdate(String sql) ;
2、对于PreparedStatement
1.执行查询操作时使用executeQuery( ),返回值为Resultset 类型。
Resultset res = executeQuery() ;
2.执行增、删、改操作时使用executeUpdate( ) ,返回值是整形,意义为受影响的行数。
int res = executeUpdate() ;
更多推荐
所有评论(0)