请求赐教 运行后提示:String sql="insert into message(username,password) values(?,?)";有错误;旁观者

请求赐教 运行后提示:String sql="insert into message(username,password) values(?,?)";有错误;旁观者,第1张

String sql="insert into message(username,password) values(?,?)"

ps.setString(1,username)

ps.setString(2,password)

你的 sql改变后,ps要重新prepare,上面的代码改成

String sql="insert into message(username,password) values(?,?)"

ps=conn.prepareStatement(sql)

ps.setString(1,username)

ps.setString(2,password)

就可以了

最后记得拉完屎后要擦屁股。

rs, ps, con都要顺次关闭,不然会引起内存泄漏,数据库宕机

你指的是JDBC连接池连接超时失效问题的问题吧?

这是因为mysql默认保持连接的时间是8小时,如果这个连接在8小时内无人访问的话,就会关闭这个连接。但是连接池设计的时候没有考虑到这个问题,还把失效的连接拿出去就会导致出现异常。

解决方法:

1、创建一个线程每隔一段时间就测试一下连接,保持连接时最新的,永远达不到8小时无人访问。

2、连接池取连接的时候判定是否这个连接有效。

[java] view plain copy

if (conn.isValid(1000)){

return conn

}

else{

return this.CreateConnection()

}

3、不使用连接池,直接拿了就用,用了就还。

连接池的概念:

用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

JDBC数据库连接池接口(DataSource):

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商可以让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!

Java用JDBC实现对Oracle数据库 *** 作

import java.sql.Connection

import java.sql.DriverManager

public class UtilDbForOracle {

public static Connection getConnection(){

try{

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()

String url = "jdbc:oracle:thin:@192.168.0.10:1521:ora920"

String username = "shihuan"

String password = "zznode"

Connection conn = DriverManager.getConnection(url, username, password)

// System.out.println(conn + "------return conn")

return conn

}

catch (Exception e){

System.out.println(e.getMessage())

return null

}

}

}

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

import java.sql.Connection

import java.sql.PreparedStatement

import java.sql.ResultSet

import java.sql.SQLException

import org.apache.commons.logging.Log

import org.apache.commons.logging.LogFactory

public class DBOperaRule {

private Connection conn = null

// private Statement stmt = null

private PreparedStatement pstmt = null

private ResultSet rs = null

private boolean hadErrors = false

//创建数据库连接

public void createConnection(){

conn = UtilDbForOracle.getConnection()

}

//发起事务

public void beginTransaction(){

try {

conn.setAutoCommit(false)

} catch (SQLException e) {

e.printStackTrace()

}

}

//执行事务

public void commitTransaction() throws SQLException{

if(!hadErrors){

conn.commit()

}else{

conn.rollback()

hadErrors = false

}

hadErrors = false

conn.setAutoCommit(true)

}

//标记出错

public void errorOccur(){

hadErrors = true

}

//执行插入、删除和更新 *** 作

synchronized public void execute(String sql) throws SQLException {

this.pstmt = conn.prepareStatement(sql)

if(pstmt != null){

pstmt.executeUpdate(sql)

}else{

Log log = LogFactory.getLog("mylog")

log.error("数据库插入数据出错")

}

}

//执行查询 *** 作

synchronized public ResultSet read(String sql) throws SQLException {

this.pstmt = conn.prepareStatement(sql)

// Statement stmt = conn.createStatement()

if(pstmt != null){

// if(stmt != null){

ResultSet tmp = null

tmp = pstmt.executeQuery(sql)

// tmp = stmt.executeQuery(sql)

//下面为打印数据表中的字段名称

// ResultSetMetaData md = tmp.getMetaData()

// for(int i=1i<=md.getColumnCount()i++){

//System.out.println(md.getColumnName(i))

//}

//循环打印数据库中的值

// while(tmp.next()){

// System.out.println("tmp是否在最后一行:" + tmp.isLast())

// System.out.println("row: " + tmp.getRow())

// System.out.println(tmp.getString(1) + " -->" + tmp.getString(2))

// }

return tmp

}else{

return null

}

}

//执行查询个数 *** 作

synchronized public int readCount(String sql) throws SQLException {

this.pstmt = conn.prepareStatement(sql)

int nCount = 0

try{

if(pstmt != null){

ResultSet tmp = null

tmp = pstmt.executeQuery(sql)

if(tmp != null &&tmp.next()){

nCount = tmp.getInt(1)

}else{

nCount = 0

}

}

}catch(SQLException e){

nCount = 0

}

return nCount

}

//创建数据库连接

/*

public boolean createConnection(){

try{

conn = UtilDbForOracle.getConnection()

conn.setAutoCommit(false)

}catch(SQLException e){

System.out.println("createConnectionError!")

System.out.println(e.getMessage())

return false

}

return true

}

*/

//进行数据库增,删除,更新 *** 作

/*

public boolean executeUpdate(String sql){

if(conn == null){

createConnection()

}

try{

stmt = con.createStatement()

int iCount = stmt.executeUpdate(sql)

System.out.println(" *** 作成功, *** 作影响的记录数:" + String.valueOf(iCount))

}catch(SQLException e){

System.out.println("executeUpdateError!")

System.out.println(e.getMessage())

return false

}

return true

}

*/

/*

public boolean executeUpdateBatch(List list){

if(conn == null) createConnection()

try{

stmt = conn.createStatement()

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

stmt.addBatch((String) list.get(i))

int i[] = stmt.executeBatch()

System.out.println(" *** 作成功, *** 作影响的记录数:" + i.length)

}catch(SQLException e){

System.out.println("executeUpdateBatchError!")

System.out.println(e.getMessage())

return false

}

return true

}

*/

//进行数据库查询 *** 作

/*

public ResultSet executeQuery(String sql){

if(conn == null) createConnection()

try{

stmt = conn.createStatement()

rs = stmt.executeQuery(sql)

}catch(SQLException e){

System.out.println("executeQueryError!")

System.out.println(e.getMessage())

return null

}

return rs

}

*/

/*

public List executeQueryForList(String s) throws SQLException{

ResultSet rs = this.executeQuery(s)

List list = new ArrayList()

HashMap hash

String tmp = null

int cols = rs.getMetaData().getColumnCount()

while(rs.next()){

hash = new HashMap()

for(int i = 1i <= colsi++){

tmp = rs.getString(i)

if(tmp == null)

tmp = ""

hash.put(rs.getMetaData().getColumnName(i).toLowerCase(), tmp)

}

list.add(hash)

hash = null

}

return list

}

*/

/*

public HashMap executeQueryForMap(String s) throws SQLException{

ResultSet rs = this.executeQuery(s)

HashMap hash = new HashMap()

String tmp = null

int cols = rs.getMetaData().getColumnCount()

while(rs.next()){

hash = new HashMap()

for(int i = 1i <= colsi++){

tmp = rs.getString(i)

if(tmp == null)

tmp = ""

hash.put(rs.getMetaData().getColumnName(i).toLowerCase(), tmp)

}

}

return hash

}

*/

/*

public ResultSet executeQueryForPage(String sql){

if(conn == null) createConnection()

try{

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY)

rs = stmt.executeQuery(sql)

}catch(SQLException e){

System.out.println("executeQueryError!")

System.out.println(e.getMessage())

return null

}

return rs

}

*/

//对数据库 *** 作进行提交

/*

public boolean commit(){

try{

conn.commit()

}catch(SQLException e){

System.out.println("commitError!")

System.out.println(e.getMessage())

return false

}

return true

}

*/

//关闭数据库连接

public void closeDBConnection(){

if(conn != null){

try{

//stmt.close()

pstmt.close()

conn.close()

}catch(SQLException e){

System.out.println("closeDBConnectionError!")

e.printStackTrace()

}finally{

try{

//stmt.close()

pstmt.close()

}catch(SQLException e){

e.printStackTrace()

}

conn = null

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9927145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存