Java JDBC实现数据库的增删改查操作

主要有三部分组成:一:连接驱动。   二:Model对象。  三:实现类

 

连接驱动:这里连接的是sybase数据库。不同数据库请添加相应的驱动以及连接。


 

package testJDBC;


import java.sql.Connection;

import java.sql.DriverManager;


public class DataBaseConn {

public static Connection getDbConn() throws Exception {

Connection conn = null;


try {

Class.forName("com.sybase.jdbc3.jdbc.SybDriver");

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("Can not find DataBase  驱动!");

e.printStackTrace();

}

              

try {

conn = DriverManager.getConnection(

"jdbc:sybase:Tds:***.***.***.***:端口号/DB名称", "用户名",

"密码");

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("Database Connect Errror  !!!");

e.printStackTrace();

}


return conn;

}

}

 

 

model对象:

 

 

package testJDBC;


import java.io.Serializable;

import java.util.Date;

/**

 * @author fl

 */

@SuppressWarnings("serial")

public class NoteModel implements Serializable{ 

private Long id;

private String ip; 

private String visiturl;

private String param;

private Date visittime;


// 这里的get()、set()方法


}

 

 

实现类:这里有个需要注意的就是对时间的处理。java.sql.Date 和 java.util.Date是不相同的。

 

 

 

 java.sql.Date  只是用于SQl语句,只有日期没有时间。

   java.util.Date 用于除SQl语句外的所有日期处理。

 

  java.util.Date java.sql.Date 的父类。

 

  转化:

  java.sql.Date sDate = new java.sql.Date();

  java.util.Date date = new java.util.Date(dDate.getTime(0);

 

 

-------------------------------------------------------------------------------------------------------

 

 

package testJDBC;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;


public class operClass {

//添加数据

public static boolean createNote(NoteModel nm,String tableName){


PreparedStatement ps = null;

String sql = "insert into "+tableName+"(IP,VISITURL,PARAM,VISITTIME) values (?,?,?,?)";

Connection conn = null;


try {

conn = DataBaseConn.getDbConn();

ps = conn.prepareStatement(sql);

ps.setString(1,nm.getIp());

ps.setString(2,nm.getVisiturl());

ps.setString(3,nm.getParam());

ps.setDate(4,(java.sql.Date) nm.getVisittime());

ps.execute();

ps.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return true;

}

//修改数据

public static boolean updateNote(NoteModel nm,String tableName){

//这样携带参数,注意引号附近的空格。

String sql = "update "+tableName+" SET PARAM=?, IP=? where ID = ?";

Connection conn= null;

PreparedStatement ps = null;


try {

conn = DataBaseConn.getDbConn();

ps = conn.prepareStatement(sql);

ps.setString(1,nm.getParam());

ps.setString(2,nm.getIp());

ps.setLong(3,nm.getId());

ps.executeUpdate();

ps.close();


} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


return true;

}

//删除数据

public static boolean delete(NoteModel nm,String tableName){

//利用?作为占位符

String sql="delete from "+tableName+" where ID=?";

//1:首先声明 连接对象

Connection conn = null;

//2:声明预编译的PreparedStatement对象

PreparedStatement ps = null;


try {

//3:设置连接对象参数

conn = DataBaseConn.getDbConn();

//4: 设置预编译的Sql语句

ps=conn.prepareStatement(sql);

ps.setLong(1,nm.getId());

//5:执行

ps.executeUpdate();

// 6:关闭

ps.close();


} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return true;

}

//按照主键查询

public static NoteModel queryById(NoteModel nm,String tableName){

NoteModel getNm = new NoteModel();

String sql = "select ID,IP,VISITURL,PARAM,VISITTIME from "+tableName+" where ID=?";

Connection conn = null;

PreparedStatement ps = null;


try {

conn = DataBaseConn.getDbConn();

ps = conn.prepareStatement(sql);

ps.setLong(1,nm.getId());


//取得返回值.  游标

ResultSet rs =ps.executeQuery();

if(rs.next()){

getNm.setId(rs.getLong(1));

getNm.setIp(rs.getString(2));

getNm.setVisiturl(rs.getString(3));

getNm.setParam(rs.getString(4));

getNm.setVisittime(rs.getDate(5));

}

//关闭 

rs.close();

ps.close();


} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return getNm;

}

//查询全部数据

public static List queryList(String tableName){

List list = new ArrayList();

String sql = "select ID,IP,VISITURL,PARAM,VISITTIME from "+tableName;

Connection conn = null;

PreparedStatement ps = null;


try {

conn = DataBaseConn.getDbConn();

ps = conn.prepareStatement(sql);

// 返回结果集

ResultSet rs = ps.executeQuery();

while(rs.next()){

NoteModel getNm = new NoteModel();

getNm.setId(rs.getLong(1));

getNm.setIp(rs.getString(2));

getNm.setVisiturl(rs.getString(3));

getNm.setParam(rs.getString(4));

getNm.setVisittime(rs.getDate(5));

list.add(getNm);

}

rs.close();

ps.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return list;

}

//按照条件查询

public static List queryByOCndtion(NoteModel nm,String tableName){

List list = new ArrayList();

String sql = "select ID,IP,VISITURL,PARAM,VISITTIME from "+tableName+" where 1=1 ";


Connection conn = null;

PreparedStatement ps = null;

try {

conn = DataBaseConn.getDbConn();

//这里因为是做的动态查询,所以要做一个通用 的Sql语句的拼接 

ps = conn.prepareStatement(getSql(nm,sql));

//设置参数值

setPrepredStatement(ps,nm);

ResultSet rs = ps.executeQuery();

while(rs.next()){

NoteModel getNm = new NoteModel();

getNm.setId(rs.getLong(1));

getNm.setIp(rs.getString(2));

getNm.setVisiturl(rs.getString(3));

getNm.setParam(rs.getString(4));

getNm.setVisittime(rs.getDate(5));

list.add(getNm);

}

rs.close();

ps.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

//拼接SQL语句

public static String getSql(NoteModel nm,String sql){


if(nm.getIp() != null && nm.getIp().trim().length() >0){

sql+="and IP = ? ";

}

if(nm.getParam() != null && nm.getParam().trim().length() >0){

sql+="and PARAM like ? ";

}

if(nm.getVisiturl() != null && nm.getVisiturl().trim().length() > 0){

sql+="and VISITURL like ? ";

}

System.out.println("sql: "+sql);

return sql;

}

//确定参数位置

public static PreparedStatement setPrepredStatement(PreparedStatement ps,NoteModel nm)throws Exception{


int count = 1;

if(nm.getIp() != null && nm.getIp().trim().length() >0){

ps.setString(count,nm.getIp());

count ++;

}

if(nm.getParam() != null && nm.getParam().trim().length() >0){

// 百分号一定要拼接在这里,整体作为一个参数。

ps.setString(count,"%"+nm.getParam()+"%");

count ++;

}

if(nm.getVisiturl() != null && nm.getVisiturl().trim().length() > 0){

ps.setString(count,"%"+nm.getVisiturl()+"%");

count ++;

}

return ps;

}

//测试函数


public static void main(String[] args) {

String tableName="Record_UserVisit20100821";

NoteModel nmM = new NoteModel();

nmM.setIp("789.789.789.789");

nmM.setParam("asdf");

nmM.setVisiturl("qwer");

List list=queryByOCndtion(nmM,tableName);

System.out.println(list.size());

for(int i =0;i<list.size();i++){

NoteModel nm = (NoteModel) list.get(i);

System.out.println("ID:"+nm.getId()+", IP:"+nm.getIp()+", param:"+nm.getParam()+", data:"+nm.getVisittime()+", url:"+nm.getVisiturl());

}


NoteModel nm = new NoteModel();

nm.setIp("789.456.123.963");

nm.setParam("name=2B&sex=m");

nm.setVisiturl("www.b2bjoy.com");

Date date = new Date();

java.sql.Date sDate = new java.sql.Date(date.getTime());


nm.setVisittime(sDate);


}

}

 

 

 

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值