问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

此段JDBC连接程序不能插入NULL。高手看看帮忙解决一下

发布网友 发布时间:2022-04-07 17:42

我来回答

6个回答

懂视网 时间:2022-04-07 22:04

       JDBC连接数据库基本的步骤是固定的,这样就可以考虑封装一个工具类来简化数据库操作。

         封装时用到了Java中的properties配置文件,是以一种键值对的形式存在的,可以把连接数据库要动态的信息保存到里面,这样比较直观,不容易出错,而且容易维护。

         把配置文件放到src下就可以,如果要放到包下面就配置文件的相对路径就必须从包名开始。

         Demo :

         db.properties

         

mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8
mysqlUser=root
mysqlPwd=1234
oracleDriver=oracle.jdbc.driver.OracleDriver
oracleURL=jdbc:oracle:thin:@localhost:1521:orcl
oracleUser=scott
oraclePwd=tiger

         JDBCUtil.java

 

package com.wxisme.jdbcutil;

import java.io.Closeable;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * JDBC数据库操作工具类 简化数据库操作
 * @author wxisme
 *
 */
public class JDBCUtil {
	//资源文件
	static Properties pros = null;
	//静态初始化 当加载JDBCUtil类时调用
	static { 
		pros = new Properties();
		try {
			//加载资源文件
			InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
			if(in == null) {
				throw new FileNotFoundException("配置文件未找到");
			}
			pros.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取数据库连接
	 * @return Connection
	 */
	public static Connection getMySQLConnection() {
		Connection conn = null;
		try {
			//加载数据库驱动
			Class.forName(pros.getProperty("mysqlDriver"));
			//获取数据库连接
			conn = DriverManager.getConnection(pros.getProperty("mysqlURL"),
					pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static Connection getOracleConn(){
		try {
			Class.forName(pros.getProperty("oracleDriver"));
			return DriverManager.getConnection(pros.getProperty("oracleURL"),
					pros.getProperty("oracleUser"),pros.getProperty("oraclePwd"));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 * 关闭io资源
	 * @param io
	 */
	public static void closeFile(Closeable ... io) {
		for(Closeable temp : io) {
			if(temp != null) {
				try {
					temp.close();
				} catch (IOException e) {
					System.out.println("文件关闭失败");
					e.printStackTrace();
				}
			}
		}
	}
	
	//关闭JDBC资源 注意顺序
	public static void close(ResultSet rs,Statement ps,Connection conn) {
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Statement ps,Connection conn){
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Connection conn){
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	

}

   UtilTest.java

package com.wxisme.jdbcutil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class UtilTest {

	public static void main(String[] args) {
		Connection conn = JDBCUtil.getMySQLConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "select * from student where id = ?";
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1, 1);
			rs = ps.executeQuery();
			
			while(rs.next()) {
				System.out.println(rs.getString("name"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

 还可以进一步封装成线程安全的工具类。

封装JDBC工具类

标签:

热心网友 时间:2022-04-07 19:12

public void fillParamters(PreparedStatement pstr, Object... objects)

这个方法中,你将 pstr.setNull(i++, Types.NULL);
改成 pstr.setObject(i++, null);试试,而且你的表中相应的字段要设置成允许空值。
你这个JDBC工具类还可以封装的更好些,比如结合Java反射机制来做。

希望我的回答对你有所帮助。

热心网友 时间:2022-04-07 20:30

是企业而定喽,做小型系统多用JDBC,中大型系统的话,多用框架结构。我个人认为目前用JDBC的不多
请参考

热心网友 时间:2022-04-07 22:04

看的蛋疼 我写了一个的BaseDao 咱用拼音

private static final String QUDONG="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL="jdbc:sqlserver://localhost:1433;databasename=company";
private static final String UID="sa";
private static final String PWD="";
private static Connection conn =null;
private static PreparedStatement pata=null;
/**
* 打开连接
*/
private void connOpen()
{
try {
if(conn==null||conn.isClosed())
{
Class.forName(QUDONG);
conn=DriverManager.getConnection(URL,UID,PWD);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 关闭连接
*/
public void connClose()
{
try {
if(conn!=null&&!conn.isClosed())
{
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 执行修改的sql语句
*/
public int UpdataDB(String sql)
{
connOpen();
try {
pata=conn.prepareStatement(sql);
return pata.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1;
}
/**
* 执行传参数的sql语句
*/
public int UpdataDB(String sql,Object[] pram)
{
connOpen();
try {
pata=conn.prepareStatement(sql);
for(int i=0;i<pram.length;i++)
{
pata.setObject(i+1,pram[i]);
}
return pata.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1;
}
/**
* 执行查询的sql语句
*/
public ResultSet lookDB(String sql)
{
connOpen();
try {
pata=conn.prepareStatement(sql);
return pata.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 执行查询的sql语句
*/
public ResultSet lookDB(String sql,Object[] pram)
{
connOpen();
try {
pata=conn.prepareStatement(sql);
for(int i=0;i<pram.length;i++)
{
pata.setObject(i+1,pram[i]);
}
return pata.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return null;
}

热心网友 时间:2022-04-07 23:56

请贴出错误信息,进行分析.

热心网友 时间:2022-04-08 02:04

你这几个方法写的真是让哥烦,自己去搜几个好点的,,,
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivo y3t手机能拨打和接听电话,不能收发短信 vivoy3t手机突然接收不到短信 vivoy3短信消息怎么提醒 无奈什么意思是什么 怎样让炒出的丝瓜不发黑? 钟表是以什么计量时间 钟表以( )、()、( )计量时间。 钟表以( )、()、( )单位计量时间 紫荆花开放时间 《青春 须臾成殇》渭伊的txt全集下载地址 奥克斯热水器使用方法? 十二生肖皇宫所属哪个肖 十二生肖中皇宫里生肖是什么 海底龙宫戏珍形容什么生肖 马儿飞奔闯六关,龙在龙宫多自在。猜生肖 龙到天宫告猴王 猜一生肖 深往海底龙宫里是什么生肖?怎么解释? 求解释《水中陆地都适应,东海龙宫借神针》打一生肖 中国平安和中国平安人寿是什么关系 水中陆地都适应,东海龙宫借神针。解一生肖。 平安保险主要有什么区别 搜遍龙宫都是宝猜一生肖 中国人寿保险与平安保险的区别?? 龙在龙宫多自在打一生肖 中国人寿保险与中国平安保险的区别?那种更值得信任。 莲花身富贵命住龙宫猜生肖 鱼龙混杂同一流,传说龙宫有神针猜一生肖 有理便宜迟一步,传说龙宫有神针.猜一生 肖 人寿保险跟平安保险区别 八仙过海去龙宫指什么生肖 生于七月的植物有哪些?谢谢... 《七夜雪》 初衷 谁有好看的武侠小说 在编写jdbc的时候要写很多sql很麻烦,能不不能封装一个jdbc的操作,类似于hibernate那样,操作对象就可以 惊蛰 吃什么 驾驶员考试科目三出现人工评判是怎么回事? 2017年科目三考试的评判标准有哪些 驾照科目三考试有什么新规定 劳动仲裁开庭费用大概多少 劳动仲裁开庭要多少钱,劳动仲裁开庭费用 劳动仲裁开庭需要钱吗 请律师代理出庭仲裁要多少费用?? 劳动仲裁开庭后要不要收费? 劳动仲裁开庭后是自己辩论,还是*派人给双方辩论,劳动仲裁开庭的费用怎么收取? 申请劳动仲裁开庭需要交钱吗? 为什么我家的电脑的音箱一个会响一个不会响? 申请劳动仲裁要开庭吗 劳动局开庭要收费吗? 劳动仲裁开庭吗 电脑音箱为什么两个喇叭只有一个响