Jdbc demo

String url = "jdbc:mysql://127.0.0.1:3306/mysql";
String username = "root";
String password = "123456";
try {
	Class.forName("com.mysql.jdbc.Driver");
	Connection con = DriverManager.getConnection(url,username,password);
	String sql = "select * from table";
	Statement st = con.createStatement();
	ResultSet rs = st.executeQuery(sql);
			
	while(rs.next()){
      // 次序从1开始
	System.out.println(rs.getString(1));
	}
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException 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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值