public class TestJDBC {
@Test
public void test3(){
// String sql = "select id, name, email, birth from customers where id <10";
// List<Customer> list = getForList(sql, Customer.class);
// for(Customer customer : list){
// System.out.println(customer);
// }
String sql1 = "select order_id id, order_name name, order_date date from `order` where order_id <3";
List<Order> list1 = getForList(sql1, Order.class);
for(Order order : list1){
System.out.println(order);
}
}
// 通用的查询方法,返回多个对象的集合(version 1.0)
public <T> List<T> getForList(String sql, Class<T> clazz){
Connection connection = null;
Statement s = null;
ResultSet rs = null;
try {
connection = JDBCUtils.getConnection();
s = connection.createStatement();
rs = s.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
//获取列的个数
int count = rsmd.getColumnCount();
List<T> list = new ArrayList<T>();
while(rs.next()){
T t = clazz.newInstance();
for(int i=0;i<count; i++){
Object columnValue = rs.getObject(i+1);// 获取列值
// getColumnLabel():获取列的别名,此别名由java类的属性名决定
String columnLable = rsmd.getColumnLabel(i+1);
PropertyUtils.setProperty(t, columnLable, columnValue);
}
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.close(rs, s, connection);
}
return null;
}
@Test
public void test2(){
String sql = "select id, name, email, birth from customers where id = 22;";
Customer customer = getInstance(sql,Customer.class);
System.out.println(customer);
}
// 通用的查询方法,返回一个对象(version 1.0)
public <T>T getInstance(String sql, Class<T> clazz){
Connection connection = null;
Statement s = null;
ResultSet rs = null;
try {
connection = JDBCUtils.getConnection();
s = connection.createStatement();
rs = s.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
// getColumnCount():获取结果集的列数
int count = rsmd.getColumnCount();
while(rs.next()){
T t = clazz.newInstance();
for(int i=0; i<count; i++){
// 获取列值
Object columnValue = rs.getObject(i + 1);
// getColumnLabel():获取列的别名,此别名由java类的属性名决定
String columnLable = rsmd.getColumnLabel(i + 1);
PropertyUtils.setProperty(t, columnLable, columnValue);
}
return t;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.close(rs, s, connection);
}
return null;
}
@Test
public void test(){
String sql = "insert into customers(name, email, birth) values('shawn', 'shawn@163.com', '1998-09-09')";
update(sql);
}
// 通用的增、删、改的方法(version 1.0)
public void update(String sql){
Connection connection = null;
Statement s = null;
try {
connection = JDBCUtils.getConnection();
s = connection.createStatement();
s.execute(sql);
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.close(null, s, connection);
}
}
@Test
public void test1() throws Exception{
Connection connection = JDBCUtils.getConnection();
System.out.println(connection);
}
}
- 浏览: 6912 次
相关推荐
在通用查询处理流程中,可能涉及到SELECT、INSERT、UPDATE或DELETE等语句。例如,一个简单的查询可能如下所示:`std::string query = "SELECT * FROM table_name";` 4. **预处理和执行**: 使用`sql::...
DAO类应该提供了这些操作的接口或方法,例如`insert()`、`select()`、`update()`和`delete()`。 3. 参数处理:为了执行SQL语句,DAO需要能够处理参数。这可能通过预编译的`PreparedStatement`实现,以防止SQL注入...
在多条SQL语句需要一起成功或一起失败的情况下,我们可以使用`Connection`对象的`setAutoCommit(false)`来开启手动事务,然后在所有操作完成后再调用`commit()`提交事务,或者在发生错误时调用`rollback()`回滚事务...
3. **批处理操作**:DBUtils支持批处理更新,可以一次提交多条SQL语句,提高了数据库操作的效率。 4. **QueryRunner**:QueryRunner是DBUtils中的核心类,提供了执行SQL查询和更新的方法。它可以执行简单的SQL语句...
4. **批处理执行**:当需要执行多条SQL时,提供批处理接口。 ```java public static void batchExecute(Connection conn, List<String> sqlList) throws SQLException { PreparedStatement pstmt = conn.prepare...
7. **事务管理**:如果涉及多条SQL语句的原子性操作,可能需要使用`Connection`的`setAutoCommit()`方法禁用自动提交,并通过`commit()`或`rollback()`手动控制事务。 通过这个项目,新手可以学习到如何配置数据库...
4. **执行SQL**:调用Statement或PreparedStatement的方法,如`executeQuery()`(查询)或`executeUpdate()`(非查询)。 5. **处理结果**:如果执行的是查询,可以通过ResultSet获取结果;非查询操作则会返回受影响...
3. **批量更新**:`QueryRunner`还支持批量更新操作,如`runBatch()`,可以用于执行多条DML(数据操纵语言)语句,如INSERT、UPDATE或DELETE,提高数据库操作效率。 4. **通用的数据库连接管理**:DBUtils提供了`...
批处理允许一次性执行多条SQL语句,从而提高性能。 #### 十四、分页 在处理大量数据时,分页是非常有用的。通过限制查询结果的数量,可以提高响应速度和用户体验。 #### 十五、可更新结果集、敏感结果集 - **可...
3. **事务管理**:在处理涉及多条记录的复杂操作时,事务提供了原子性、一致性、隔离性和持久性的保障。 压缩包中的"lib"文件夹可能包含了项目所需的外部库,例如JDBC驱动,这些jar包是连接到MySQL数据库所必需的。...
`rs.Open`用于打开数据库,`rs.MoveFirst`将指针移动到第一条记录,然后使用`While...Not rs.EOF`循环遍历记录,`rs("fieldName")`获取字段值,并使用`Response.Write`输出到客户端浏览器。最后,`rs.MoveNext`移动...
批处理允许一次性执行多条SQL语句,减少了网络往返次数,提高了批量数据处理的效率。 #### 十二、JDBC其他API 包括可滚动结果集、分页技术和可更新结果集等功能,进一步增强了JDBC的灵活性和功能。 #### 十三、...
- **事务管理**:对于涉及多条数据库操作的方法,可以添加事务控制。 4. **JDBC封装实例** - `DBUtil` 类:负责建立和关闭连接,如`getConnection()` 和 `closeResources(Connection conn, Statement stmt, ...
2. **执行SQL查询**:利用`Statement`或`PreparedStatement`对象,可以发送SELECT、INSERT、UPDATE、DELETE等SQL语句。 3. **处理结果集**:从查询返回的结果集中获取数据,可以逐行遍历,或者通过`...
4. **事务管理**:在多条SQL语句需要一起成功或一起失败时,使用begin、commit、rollback等方法进行事务管理。 5. **异常处理**:在执行SQL过程中可能出现的异常,如SQLException,需要进行捕获和处理,确保程序的...
- `addBatch()`与`executeBatch()`: 批处理可以一次执行多条SQL,提高效率。 7. **数据库连接池** - 连接池(如C3P0、HikariCP、Apache DBCP)管理数据库连接,避免频繁创建和销毁,提升系统性能。 8. **JDBC的...
其次,批处理模式的执行是指将多条SQL语句合并在一起,一次性发送给数据库服务器执行,这样可以显著提高性能。批处理模式下执行的SQL语句包括INSERT、UPDATE、DELETE和DML语句,这种模式特别适合于需要批量插入或...
// 获取第一条数据 $result = DB::table('students')->where('id', 1)->first(); // 获取指定字段的值 $name = DB::table('students')->where('id', 1)->value('name'); // 获取指定字段的所有值 $names = DB::...