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
>