当前位置: 首页 > 工具软件 > Java DB > 使用案例 >

java中db_最佳实践:在Java中使用DB

狄溪叠
2023-12-01

首先,我是

Java的新手.

我正在试图弄清楚从Java使用DB的好方法.我正在使用c3p0进行连接池.这次Hibernate或其他ORM不是一个选项,我们现在决定坚持使用“普通SQL”.

目前基本的数据检索如下所示:

private int getUserID(int sessionID, String userIP) {

int result = 0;

Connection conn = null;

PreparedStatement st = null;

ResultSet rs = null;

try {

// Application.cpds is an instance of c3p0's ComboPooledDataSource

conn = Application.cpds.getConnection();

st = conn.prepareStatement("SELECT user_id, user_ip, is_timed_out FROM g_user.user_session WHERE id = ?");

st.setInt(1, sessionID);

rs = st.executeQuery();

if ( rs.next() ) {

if ( !rs.getBoolean("is_timed_out") && userIP.equals(rs.getString("user_ip")) ) {

result = rs.getInt("user_id");

}

}

}

catch (SQLException e) {

e.printStackTrace();

}

finally {

if ( rs != null ) {

try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }

}

if ( st != null ) {

try { st.close(); } catch (SQLException e) { e.printStackTrace(); }

}

if ( conn != null ) {

try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }

}

}

return result;

}

对于这样的基本操作,代码看起来很长.另一个问题是大多数代码必须在许多地方重复(声明Connection,PreparedStatement,ResultSet,关闭它们,捕获异常).虽然,这是我在谷歌搜索时的大多数例子中看到的.

在PHP中,我将创建一个包装类,它将具有方法select(),它接受2个参数(字符串)sqlQuery和(数组)参数,并返回简单的数据数组.包装类也有几个更具体的方法,如:

> selectValue()表示单个值(例如,从用户选择count(*))

> selectRow()用于单行(例如,选择名称,来自用户的姓氏,其中id =:user_id)

> selectColumn for single column(例如,从用户中选择不同的remote_address)

在Java中实践过这样的东西吗?还是有什么更好/更方便的?或者我应该使用与上面的getUserID()示例相同的样式?正如我所说,这次ORM不是一个选择.

提前致谢 :)

编辑:目前编写DBConnection类.它从构造函数中的c3p0连接池获取连接.使用DB的公共方法很少:select()表示单个值,selectRow()表示单行或列的selectColumn(),以及insert(),update(),delete( )和ddl().方法接受String查询,Object [] params参数,params是可选的. insert(),update()和delete()返回Integer,它是PreparedStatement.executeUpdate()的结果. select方法返回不同的结果:

> ArrayCollection< HashMap< String,Object>>选择()

>对象selectValue()

> HashMap< String,Object> selectRow()

> ArrayCollection< Object> selectColumn()

最后一个问题是编译器警告 – “警告:[unchecked] unchecked cast”.这是因为所有方法都调用返回Object的单个私有方法,并将其结果转换为提到的类型.由于我是Java新手,我也不确定是否为选择选择了合适的类型.除此之外,一切似乎都按预期工作.

 类似资料: