java访问数据库的方式有很多种,这里我只说两种,一种是普通的访问方式,一种是用context的方式。下面分别就是这两种的代码片段:
普通的访问方式:
public class AccessDatabase {
private static Connection getConnection()throws SQLException, ClassNotFoundException{
Class.forName("com.mysql.jdbc.Driver");
Connection conn=null;
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","root");
return conn;
}
public static boolean queryUser(String name){
boolean returnValue=false;
String sql="select * from user where userName='"+name+"'";
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try{
conn=getConnection();
st=conn.createStatement();
System.out.println("SQL:"+sql);
rs=st.executeQuery(sql);
while(rs.next()){
returnValue=true;
}
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(conn!=null){
conn.close();
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("返回值:"+returnValue);
return returnValue;
}
public static void main(String[] args) {
System.out.println("DataBase Operation Demo");
boolean b=queryUser("xiaoming");
System.out.println("is have:"+b);
}
}
context的访问方式:
package com.lina.tools;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
/**
* 数据源的连接
*
* @author admin
*
*/
public class dbaccess {
private Context ct = null;
private Connection conn = null;
private DataSource ds = null;
private Statement state = null;
private ResultSet result = null;
public Connection getCon() {
try {
ct = new InitialContext();
ds = (DataSource) ct.lookup("java:comp/env/mysource");
conn = ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 查询
*
* @param sql
* @param paras
* @param rsh
* @return Object 对象,查询的是实体的对象,就返回实体 bean 的对象 .
*/
public Object query(String sql, Object paras[], ResultSetHandler rsh) {
this.getCon(); // 获取连接
QueryRunner qr = new QueryRunner(ds);
Object result = null;
try {
// 自动让参数与 sql 语句 中的?号匹配,再查询结果
result = qr.query(sql, paras, rsh);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 增删改的方法
*
* @param sql
* @param paras
* @return 整型的,更改的条数
*/
public int update(String sql, Object paras[]) {
this.getCon();
QueryRunner qr = new QueryRunner(ds);
int result = -1;
try {
result = qr.update(sql, paras);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/**
* 查询的一般方法
* @param sql
* @param param
* @return
*/
public ResultSet query(String sql, Object param[]) {
conn = this.getCon();
try {
PreparedStatement prp = conn.prepareStatement(sql);
for (int i=0; i<param.length; i++) {
prp.setObject(i+1, param[i]);
}
result = prp.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
META-INF 下的 context.xml
< Context >
< Resource name = "mysource" type = "javax.sql.DataSource"
auth = "Container"
driverClassName = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"
username = "system" password = "triger" maxActive = "200" maxIdle = "20" maxWait = "6000" />
</ Context >