JDBC demo

本文提供了两个Java示例,展示了如何使用JDBC进行批量插入操作。第一个示例使用`Statement`,第二个示例使用`PreparedStatement`。通过这两个示例,读者可以了解如何有效地批量插入数据并查询结果。

JdbcBatchInsert.java


import java.sql.*;
public class JdbcBatchInsert {
public static void main(String args[]) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/";
String db = "komal";
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "root";
try {
Class.forName(driver);
con = DriverManager.getConnection(url + db, user, pass);
con.setAutoCommit(false);// Disables auto-commit.
st = con.createStatement();
st.addBatch("INSERT INTO person VALUES('4','Komal')");
st.addBatch("INSERT INTO person VALUES('5','Ajay')");
st.addBatch("INSERT INTO person VALUES('6','Santosh')");
st.executeBatch();
String sql = "select * from person";
rs = st.executeQuery(sql);
System.out.println("No \tName");
while (rs.next()) {
System.out.print(rs.getString(1) + " \t");
System.out.println(rs.getString(2));
}
rs.close();
st.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

?************************************************************************?


JdbcPreparedstatementAddbatch.java


import java.sql.*;

public class JdbcPreparedstatementAddbatch {

public static void main(String args[]) {

Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;

String url = "jdbc:mysql://localhost:3306/";
String db = "komal";
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "root";

try {

Class.forName(driver);
con = DriverManager.getConnection(url + db, user, pass);

pst = con.prepareStatement("insert into lib value(?,?)");
con.setAutoCommit(false);

pst.setString(1, "6");
pst.setString(2, "106");
pst.addBatch();

pst.setString(1, "7");
pst.setString(2, "107");
pst.addBatch();

pst.setString(1, "8");
pst.setString(2, "108");
pst.addBatch();

pst.executeBatch();

pst.close();

String sql = "select * from lib";
pst = con.prepareStatement(sql);

rs = pst.executeQuery();

System.out.println("rno\tlibno");
while (rs.next()) {
System.out.print(rs.getString(1) + " \t");
System.out.println(rs.getString(2));
}
rs.close();
pst.close();
con.close();

} catch (Exception e) {
e.printStackTrace();
}
}
}
### Java JDBC 示例代码 #### 建立数据库连接 为了使用JDBC操作数据库,首先需要建立到目标数据库的连接。这通常通过`DriverManager.getConnection()`方法完成。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JdbcConnectionExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb"; // 数据库URL String user = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, user, password)) { System.out.println("Connected to the database!"); } catch (SQLException e) { System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage()); } } } ``` 这段代码展示了如何利用MySQL作为示例来获取一个数据库连接[^1]。 #### 执行查询并处理结果集 一旦建立了连接,就可以执行SQL命令并与返回的数据交互。 ```java import java.sql.*; public class QueryExecutionExample { private static final String QUERY = "SELECT id, name FROM users"; public static void main(String[] args) throws SQLException { Connection con = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/testdb", "root", "password" ); stmt = con.createStatement(); rs = stmt.executeQuery(QUERY); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.print("ID: " + id); System.out.println(", Name: " + name); } } finally { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (con != null) con.close(); } } } ``` 此部分说明了怎样发送一条简单的SQL SELECT语句给服务器,并遍历得到的结果集合[^2]。 #### 使用PreparedStatement防止SQL注入攻击 对于带有参数化的查询来说,推荐采用`PreparedStatement`对象代替普通的`Statement`,因为前者能有效防范SQL注入风险。 ```java String sql = "INSERT INTO Users(name, age) VALUES (?, ?)"; try (PreparedStatement pstmt = connection.prepareStatement(sql)) { pstmt.setString(1, "John Doe"); pstmt.setInt(2, 30); int affectedRows = pstmt.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex); } ``` 这里给出了向表中插入新记录的例子,同时也体现了预编译语句的安全性和效率优势[^3]。 #### 处理事务管理 当涉及到多个相互依赖的操作时,应该启用事务支持以确保数据的一致性。 ```java connection.setAutoCommit(false); // 开始事务 try { // 进行业务逻辑... connection.commit(); // 提交更改 } catch (Exception e) { connection.rollback(); // 发生异常则回滚 } finally { connection.setAutoCommit(true); // 结束事务 } ``` 上述片段解释了如何控制自动提交模式以及何时调用commit()或rollback()[^4]。 #### 封装常用功能至工具类 考虑到重复性的任务如打开/关闭连接、准备声明等都可以被抽象出来形成公共的方法,在实际项目里往往会有专门负责这些工作的辅助类存在。 ```java public class DBUtil { private static final String DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver"; private static final String CONNECTION_URL = "jdbc:mysql://localhost:3306/testdb"; private static final String USERNAME = "root"; private static final String PASSWORD = "password"; static { try { Class.forName(DRIVER_CLASS_NAME); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(CONNECTION_URL, USERNAME, PASSWORD); } public static void close(Connection... connections) { for (Connection c : connections) { if (c != null && !c.isClosed()) { try { c.close(); } catch (SQLException ignored) {} } } } } ``` 该段落描述了一个简化版的实用程序类,它可以帮助减少样板代码的数量同时提高可维护性[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值