边肖将与您分享如何在java中实现JDBC的添加、删除和修改。希望大家看完这篇文章后有所收获。我们一起讨论一下吧!

让我们先看看步骤:
这里不建议使用语句,原因有二:
1.有一个字符串拼写操作,很繁琐。
2.存在sql注入问题。
我们应该用谁来代替陈述?
00-1010操作前,先解决以上问题。我们用PreparedStatement代替陈述。
00-1010您可以通过调用Connection对象的preparedStatement(String sql)方法来获取PreparedStatement对象。
PreparedStatement接口是语句的子接口,表示预编译的SQL语句。
由PreparedStatement对象表示的SQL语句中的参数用问号(?),调用PreparedStatement对象的setXxx()方法来设置这些参数。setXxx()方法有两个参数。第一个参数是要设置的SQL语句中参数的索引(从1开始),第二个参数是要设置的SQL语句中参数的值。
优点:
解决字符串拼串问题,防止sql注入提高了绩效。
一、增删改操作
这里是对不同表的一般的增加、删除和修改操作。直接拿去用就行了。
//增加、删除、修改的一般操作
publicbooleaupdateinfo(Stringsql,Object.args){ 0
Connectionconn=null
PreparedStatementps=null
booleanb=true
尝试{
//1.建立联系
conn=jdbcutils . GetConnection();
//2.预编译sql语句
PS=conn . PrepareStatement(SQL);
//3.填写占位符
for(inti=0;iargs.lengthI){ 0
铌
sp;ps.setObject(i+1,args[i]);
}
//4.执行操作
b = ps.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
//5.关闭资源
JDBCUtils.close(conn,ps);
}
return b;
}
是不是复制使用会报错,这是因为博主把数据库连接和关闭资源也封装成了一个类JDBCUtils。
下面给出这个类的具体代码:
配置文件就自己写吧,毕竟每个人的数据库都不一样。以及该导入的包自己动动手就行了。
public class JDBCUtils {
//连接
public static Connection getConnection(){
Connection conn = null;
try {
//1.加载配置文件
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties prop = new Properties();
prop.load(is);
//2.读取配置文件
String user = prop.getProperty("user");
String password = prop.getProperty("password");
String url = prop.getProperty("url");
String driverClass = prop.getProperty("driverClass");
//3.加载驱动
Class.forName(driverClass);
//4.建立连接
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//关闭
public static void close(Connection conn, PreparedStatement ps){
try {
if (conn != null){
conn.close();
}
if (ps != null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭带resultset
public static void close(Connection conn, PreparedStatement ps , ResultSet rs){
try {
if (conn != null){
conn.close();
}
if (ps != null){
ps.close();
}
if (rs != null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1.3 测试
我们来测试一下上面的代码
这里有一张order表,里面有初始数据:

然后我们通过上面提供的方法给他增加一条数据:
public class Test {
public static void main(String[] args) {
Operation operation = new Operation();
String insertSql = "INSERT INTO `order`(order_id,order_name,order_date) VALUES (?,?,?)";
boolean b = operation.updateInfo(insertSql, 3, "CC", new Date(12312132));
if (!b){
System.out.println("操作成功!");
}else {
System.out.println("操作失败!");
}
}
}
控制台打印输出:

那么是不是已经插入成功了呢,我们去数据库中看一下:
我们 SELECT * FROM `order`;

看来我们确实成功了!所以我们给出的方法还是没有问题。
二、查操作
接下来我们就是查操作了。
2.1 通用对不同表进行一条数据查询操作
public <T> T doQuery(Class<T> clazz,String sql,Object...args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1.建立连接
conn = JDBCUtils.getConnection();
//2.预编译sql语句
ps = conn.prepareStatement(sql);
//3.填充占位符
for (int i = 0; i <args.length ; i++) {
ps.setObject(i+1,args[i]);
}
//4.得到结果集ResultSet
rs = ps.executeQuery();
//5.得到结果集元数据
ResultSetMetaData rsdm = rs.getMetaData();
//6.通过rs得到列值,rsdm得到列名和列数
//得到列数
int columnCount = rsdm.getColumnCount();
if (rs.next()){
T t = clazz.getDeclaredConstructor().newInstance();
for (int i = 0; i <columnCount ; i++) {
//得到列值
Object columnvalue = rs.getObject(i + 1);
//得到列的别名
String columnLabel = rsdm.getColumnLabel(i + 1);
//通过反射给对象赋值
Field field = clazz.getDeclaredField(columnLabel);
//暴力反射
field.setAccessible(true);
field.set(t,columnvalue);
}
return t;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭资源
JDBCUtils.close(conn,ps,rs);
}
return null;
}
老样子,测试!
public class Test {
public static void main(String[] args) {
Operation operation = new Operation();
String sql = "SELECT order_id orderId,order_name orderName,order_date orderDate FROM `order` WHERE order_id = ?;";
Order order = operation.doQuery(Order.class, sql, 2);
System.out.println(order);
}
}
控制台输出:

2.2 通用对不同表进行多条数据查询操作
public <T> List doQueryMore(Class<T> clazz,String sql,Object...args){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1.建立连接
conn = JDBCUtils.getConnection();
//2.预编译sql语句
ps = conn.prepareStatement(sql);
//3.填充占位符
for (int i = 0; i <args.length ; i++) {
ps.setObject(i+1,args[i]);
}
//4.得到结果集ResultSet
rs = ps.executeQuery();
//5.得到结果集元数据
ResultSetMetaData rsdm = rs.getMetaData();
//6.通过rs得到列值,rsdm得到列名和列数
//得到列数
int columnCount = rsdm.getColumnCount();
//创建集合
ArrayList<T> list = new ArrayList<>();
while (rs.next()){
T t = clazz.getDeclaredConstructor().newInstance();
for (int i = 0; i <columnCount ; i++) {
//得到列值
Object columnvalue = rs.getObject(i + 1);
//得到列的别名
String columnLabel = rsdm.getColumnLabel(i + 1);
//通过反射给对象赋值
Field field = clazz.getDeclaredField(columnLabel);
//暴力反射
field.setAccessible(true);
field.set(t,columnvalue);
}
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭资源
JDBCUtils.close(conn,ps,rs);
}
return null;
}
看完了这篇文章,相信你对“java中如何实现JDBC增删改查操作”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/148254.html
