当前位置:Gxlcms > 数据库问题 > JDBC基础

JDBC基础

时间:2021-07-01 10:21:17 帮助过:5人阅读

try { Properties pro = new Properties(); pro.load(JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties")); String driverClass = pro.getProperty("driverClass"); String url = pro.getProperty("url"); String user = pro.getProperty("user"); String password = pro.getProperty("password"); Class.forName(driverClass); connection = DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); } return connection; }

使用PreparedStatement实现数据库中表数据的 ①增、删、改;

public static void update(String sql, Object... obj) {

Connection conn = null;

PreparedStatement ps = null;

try {

//1获取数据库连接

conn = JDBCUtil.connection();

//2.预编译sql语句,返回一个PreparedStatement的实例

ps = conn.prepareStatement(sql);

//3,填充占位符?

for (int i = 0; i < obj.length; i++) {

ps.setObject(i + 1, obj[i]);

}

//4,执行sql语句

ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

} finally {

//5,关闭资源

JDBCUtil.close(conn, ps);

}

}

通用的查询表中一条记录

/**

  • 通用的查询操作,返回表中的一条记录,封装为相应类的一个对象

  • @param clazz :返回的对象所属的类。比如:Customer

  • @param sql :包含占位符的查询语句

  • @param args :填充占位符的实参值

  • @return clazz所对应的运行时类的一个对象

    */

public <T> T queryForInstance(Class<T> clazz,String sql,Object ... args){

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

//1.获取数据库的连接

conn = JDBCUtils.getConnection();

//2.预编译sql语句,返回一个PreparedStatement的实例

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

ResultSetMetaData rsmd = rs.getMetaData();

int columnCount = rsmd.getColumnCount();//获取了结果集的列数

if(rs.next()){

//创建一个Class对应的运行时类的对象

T t = clazz.newInstance();


for(int i = 0;i < columnCount;i++){

Object columnVal = rs.getObject(i + 1);//获取的具体列的列值

String columnLabel = rsmd.getColumnLabel(i + 1);//获取列别名

//通过反射装配属性值给t对象

Field field = clazz.getDeclaredField(columnLabel);

field.setAccessible(true);

field.set(t, columnVal);

}

return t;

}

} catch (Exception e) {

e.printStackTrace();

}finally{

//7.关闭资源

JDBCUtils.close(rs, ps, conn);

}

return null;

}

通过结果集rs,获取每一条记录的数据。

if(rs.next()){//获取一行数据

//获取具体的每一列数据

//方式一:

// int id = rs.getInt(1);

// String name = rs.getString(2);

// String email = rs.getString(3);

// Date birth = rs.getDate(4);

//方式二:推荐

//形参是结果集中列的名字,即为表中列的别名。我们使用列的别名(columnLabel)获取相应的列

int id = rs.getInt("id");

String name = rs.getString("name");

String email = rs.getString("myemail");

Date birth = rs.getDate("birth");

......}

JDBC基础

标签:

人气教程排行