Java_JDBC_Oracle
1、
韩顺平 servlet 课程中,讲到 jdbc操作,应该是 第25/26讲 讲到的。
ZC:听这25讲里面的意思([21:03]又是老一套),应该在 之前哪个视频里面也讲过的,不记得了... 貌似是 java基础?还是jsp?
ZC:貌似 是 韩 专门的 jdbc课程里面有讲。
2、
DriverManager.getConnection("jdbc:oracle:thin:@IP:PORT:数据库名称", "scott", "tiger");
ZC:上面的“数据库名称”应该就是对应的“Oracle SQL Developer”(现在用的版本为:版本 2.1.1.64)中 数据库连接的属性的 SID属性。也应该就是 Oracle服务器端 Windows服务“OracleServiceXYZ”中的“XYZ”。
Connect ct = null;
ResultSet rs = null;
PerparedStatement ps = null;
try
{
// (1)、加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// (2)、得到连接(IP:PORT:数据库名称)
ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCLHSP", "scott", "tiger");
// (3)、创建PerparedStatement (通常用这个[安全性--SQL注入],那么 不通常用的 不安全的方式是啥?在哪里讲解/比较过? jdbc第3讲[53:39]用PerparedStatement取代Statement[createStatement])
ps = ct.perpareStatement("select * from users where id=? and passwd=?");
// (3.1)、给 问号 赋值
ps.setObject(1, id);
ps.setObject(2, passwd);
// (4)、执行操作
rs = ps.executeQuery();
// (5)、根据结果做处理
if (rs.next())
{
// 说明该用户 合法
}
else
{
// 说明该用户 不合法
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
// 关闭资源
if (rs != null)
{
try {
rs.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
rs = null;
}
if (ps != null)
{
try {
ps.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
ps = null;
}
if (ct != null)
{
try {
ct.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
ct = null;
}
}
3、
package zz; import java.sql.*; public class TjdbcOper { static Class<?> Fclazz = null; static Connection Fconn = null; public static Connection ConnectionOpen(String _strDriver, String _strUrl, String _strUserName, String _strPassword) throws Exception { // 加载驱动 // _strDriver ==> "oracle.jdbc.driver.OracleDriver" if (Fclazz == null) Fclazz = Class.forName(_strDriver); if (Fclazz == null) return null; // _strUrl ==> "jdbc:oracle:thin:@localhost:1521:ORCLHSP" // _strUserName ==> "scott" // _strPassword ==> "tiger" if (Fconn == null) Fconn = DriverManager.getConnection(_strUrl, _strUserName, _strPassword); return Fconn; } public static int Insert(Connection _conn, String _strInsert, String[] _strsParameter) throws Exception { PreparedStatement ps = _conn.prepareStatement(_strInsert); for (int i=0; i<_strsParameter.length; i++) ps.setString(i + 1, _strsParameter[i]); int iRtn = ps.executeUpdate(); // 韩 jdbc 第3讲[01:11:00] 有如下观点: // 如果是 update语句的话,返回的数量不确定(ZC: 可能需要更新 100条记录,但是更新到第30条时就出错了,此时返回的数字也是大于0的,是这样吗?) // 于是需要用是否抛出异常来确定update是否更新成功 [ZC: update语句抛出异常时,PreparedStatement.executeUpdate()会返回大于0的数吗?] if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } // 如果上面关闭没有成功的话,这样操作使得 没有变量指向 PreparedStatement实例,这样给垃圾回收机制去处理回收。 // 但是这里的 ps是局部变量,函数退出后,栈空间回收,也没有变量再指向 PreparedStatement实例 了,应该不用显示的赋值为null了。 // 但是,记得在哪里见过函数退出后 还能保持局部变量的,是在 C#里还是在java里? ps = null; } return iRtn; } public static void Close() {} public static void main(String[] args) { } }
X