检查网络是否有问题吗?
使用plsql developer检查是否能够正常链接到数据库主机。
第3个trycatch块,没有检查是conn变量是否为空,如果获取链接失败第三个try也会抛出异常。
package comdao;import javasql;import javaxnamingContext;
import javaxnamingInitialContext;
import javaxnamingNamingException;
import javaxsqlDataSource;public class BaseDao {
/
创建数据库连接及关闭
/
// 打开连接
public static Connection getConnection() {
Connection con = null; / oracl 的连接 /
// try { // ClassforName("oraclejdbcdriverOracleDriver");
// con = DriverManagergetConnection(
// "jdbc:oracle:thin:@127001:1521:orcl", "bbs", "sa");
// } catch (ClassNotFoundException e) {
// eprintStackTrace();
// } catch (SQLException e) {
// eprintStackTrace();
// }
/ sqlerver 的连接 /
try {
ClassforName("commicrosoftsqlserverjdbcSQLServerDriver");
con = DriverManagergetConnection(
"jdbc:sqlserver://127001:1433;databasename=bbs", "sa",
"zhou");
} catch (ClassNotFoundException e) {
eprintStackTrace();
} catch (SQLException e) {
eprintStackTrace();
}
//
return con;
} // 关闭
public static void closeAll(Connection connection,
PreparedStatement pStatement, ResultSet res) {
try {
if (connection != null && (!connectionisClosed())) {
connectionclose();
}
if (res != null) {
resclose();
res = null;
}
if (pStatement != null) {
pStatementclose();
pStatement = null;
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
对数据库增删改查package comdao;import javasqlConnection;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
import javautilArrayList;
import javautilList;import comentityNews;public class NewsDao {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
/
添加新闻
@param news
@return
/
public boolean newsAdd(News news){
boolean result=false;
String sql="insert into news values(,)";
con=BaseDaogetConnection();
try {
pstmt=conprepareStatement(sql);
pstmtsetString(1, newsgetContent());
pstmtsetString(2, FormatTimenewTime());
int i = 0;
i = pstmtexecuteUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return result;
}
/
修改新闻
@param news
@return
/
public boolean updateNews(News news){
boolean result=false;
con=BaseDaogetConnection();
try {
pstmt=conprepareStatement("update news set content= ,writedate= where newsid=");
pstmtsetString(1, newsgetContent());
pstmtsetString(2, FormatTimenewTime());
pstmtsetInt(3, newsgetNewsID());
int i = 0;
i = pstmtexecuteUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return result;
}
/
删除新闻
@param news
@return
/
public boolean deleteNews(News news){
boolean result=false;
String sql=Stringformat("delete from news where newsid=%d", newsgetNewsID());
con=BaseDaogetConnection();
try {
pstmt=conprepareStatement(sql);
int i = 0;
i = pstmtexecuteUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return result;
}
/
删除新闻 重载
@param newsId
@return
/
public boolean deleteNews(int newsId){
boolean result=false;
String sql=Stringformat("delete from news where newsid=%d", newsId);
con=BaseDaogetConnection();
try {
pstmt=conprepareStatement(sql);
int i = 0;
i = pstmtexecuteUpdate();
if (i > 0)
result = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return result;
}
/
查询所有的新闻
@return
/
public List<News> selectAllNews(){
List<News> list=new ArrayList<News>();
String sql="select from Users";
con=BaseDaogetConnection();
try {
pstmt=conprepareStatement(sql);
rs=pstmtexecuteQuery();
while(rsnext()){
News news=new News();
newssetNewsID(rsgetInt(1));
newssetContent(rsgetString(2));
newssetWriteDate(rsgetString(3));
listadd(news);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} finally {
BaseDaocloseAll(rs, pstmt, con);
}
return list;
}
/
查询单个
@return
/
public News selectOneNews(){
News news=new News();
con=BaseDaogetConnection();
try {
pstmt=conprepareStatement("select top 1 from news order by newsid desc");
rs=pstmtexecuteQuery();
while(rsnext()){
newssetNewsID(rsgetInt(1));
newssetContent(rsgetString(2));
newssetWriteDate(rsgetString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} finally {
BaseDaocloseAll(rs, pstmt, con);
}
return news;
}
}
实体类package comentity;import javaioSerializable;
public class News implements Serializable{
private int newsID;
private String content;
private String writeDate; public News() {
super();
// TODO Auto-generated constructor stub
} public News(String content, String writeDate) {
super();
thiscontent = content;
thiswriteDate = writeDate;
} public News(int newsID, String content, String writeDate) {
super();
thisnewsID = newsID;
thiscontent = content;
thiswriteDate = writeDate;
} public int getNewsID() {
return newsID;
} public void setNewsID(int newsID) {
thisnewsID = newsID;
} public String getContent() {
return content;
} public void setContent(String content) {
thiscontent = content;
} public String getWriteDate() {
return writeDate;
} public void setWriteDate(String writeDate) {
thiswriteDate = writeDate;
}
}
1 在开发环境中加载指定数据库的驱动程序。
接下来的实验中,使用数据库MySQL,所以需要下载MySQL支持JDBC的驱动程序(mysql-connector-java-5118-binjar)。
2 开发环境是MyEclipse,将下载得到的驱动程序加载进开发环境中。
3 在Java程序中加载驱动程序。
在Java程序中,通过 “ClassforName(“指定数据库的驱动程序”)”
方式来加载添加到开发环境中的驱动程序,例如ClassforName(“commysqljdbcDriver”)。
4 创建数据连接对象:通过DriverManager类创建数据库连接对象Connection。
DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名和密码,创建一个JDBC
Connection 对象。代码如:Connection connection = DriverManagergetConnection(“连接数据库的URL", "用户名",
"密码”)。
其中,URL=协议名+IP地址(域名)+端口+数据库名称;用户名和密码是指登录数据库时所使用的用户名和密码。具体示例创建MySQL的数据库连接代码如下:
Connection connectMySQL =
DriverManagergeiConnection(“jdbc:mysql://localhost:3306/myuser","root"
,"root" );
5 创建Statement对象:Statement 类的主要是用于执行静态 SQL
语句并返回它所生成结果的对象。
通过Connection 对象的 createStatement()方法可以创建一个Statement对象。例如:Statement statament =
connectioncreateStatement(); 具体示例创建Statement对象代码如下:Statement statamentMySQL =connectMySQLcreateStatement();
6 调用Statement对象的相关方法执行相对应的 SQL
语句:通过execuUpdate()方法用来数据的更新,包括插入和删除等 *** 作,例如向staff表中插入一条数据的代码:
statementexcuteUpdate( "INSERT INTO
staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 321,
'M', 'china','Personnel','3','3000' ) ") ;
7 通过调用Statement对象的executeQuery()方法进行数据的查询,而查询结果会得到
ResulSet对象,ResulSet表示执行查询数据库后返回的数据的集合,ResulSet对象具有可以指向当前数据行的指针。通过该对象的next()方法,使得指针指向下一行,然后将数据以列号或者字段名取出。如果当next()方法返回null,则表示下一行中没有数据存在。使用示例代码如下:
ResultSet resultSel =
statementexecuteQuery( "select from staff" );
8 关闭数据库连接:使用完数据库或者不需要访问数据库时,通过Connection的close() 方法及时关闭数据连接。
package comoadaoimpl; import javasqlConnection; </SPAN></li>import javasqlPreparedStatement; </SPAN></li>import javasqlResultSet; </SPAN></li>import javasqlSQLException; </SPAN></li>import javasqlStatement; </SPAN></li>import javautilList; </SPAN></li>import javautilMap; </SPAN></li> import orgapachecommonsloggingLog; </SPAN></li>import orgapachecommonsloggingLogFactory; </SPAN></li> import comoacoreDynaForm; </SPAN></li>import comoadaoDao; </SPAN></li>import comoajdbcConnectionFactory; </SPAN></li>import comoajdbcDaoAccessException; </SPAN></li>import comoajdbcDybaBean; </SPAN></li>import comoajdbcJdbcPage; </SPAN></li>import comoajdbcPage; </SPAN></li>import comoajdbcRowsDynaClass; </SPAN></li> / </SPAN></li> 基类DAO,实现一些基本共有方法 @author Gao_wx Mar 26, 2008 / public class BaseDao implements Dao { </SPAN></li> protected Log logger = LogFactorygetLog(BaseDaoclass); </SPAN></li> // 获取数据库链接 </SPAN></li> protected Connection getConnection() { </SPAN></li> return ConnectionFactorygetConnection(); </SPAN></li> } // 在此链接上,根据sql语句获取List </SPAN></li> protected List<DybaBean> getList(Connection conn, String sql) </SPAN></li> throws DaoAccessException { </SPAN></li> try { </SPAN></li> Statement st = conncreateStatement( ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); ResultSet rs = stexecuteQuery(sql); return getList(rs); </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } // 根据Result获取List </SPAN></li> protected List<DybaBean> getList(ResultSet rs) throws SQLException { </SPAN></li> RowsDynaClass rsdc = new RowsDynaClass(rs); </SPAN></li> return rsdcgetRows(); </SPAN></li> } // 根据sql语句获取List </SPAN></li> protected List<DybaBean> getList(String sql) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); return getList(conn, sql); </SPAN></li> } // 在此连接上,根据sql语句,id加载一条记录 </SPAN></li> protected DybaBean loadById(Connection conn, String sql, int id) </SPAN></li> throws DaoAccessException { </SPAN></li> try { </SPAN></li> PreparedStatement pst = connprepareStatement(sql, ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); pstsetInt(1, id); </SPAN></li> ResultSet rs = pstexecuteQuery(); List list = getList(rs); if (listsize() > 1) { </SPAN></li> loggerwarn("加载了2条以上的记录,请检查sql:" + sql); </SPAN></li> } if (listsize() == 0) { </SPAN></li> loggerwarn("数据库没有此记录!"); </SPAN></li> return null; </SPAN></li> } else { </SPAN></li> return (DybaBean) listget(0); </SPAN></li> } } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } // 根据sql语句,id,加载一条记录 </SPAN></li> protected DybaBean loadById(String sql, int id) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); return loadById(conn, sql, id); </SPAN></li> } // 在此连接上,根据Sql和id删除一条记录,返回影响行数 </SPAN></li> protected int deleteById(Connection conn, String sql, int id) </SPAN></li> throws SQLException { </SPAN></li> PreparedStatement pst = connprepareStatement(sql, ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); pstsetInt(1, id); </SPAN></li> int del = pstexecuteUpdate(); </SPAN></li> return del; </SPAN></li> } // 根据sql语句,id删除一条记录 </SPAN></li> protected int deleteById(String sql, int id) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); try { </SPAN></li> int del = deleteById(conn, sql, id); </SPAN></li> return del; </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } protected Page getPage(DynaForm form, String sql) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); Page page = getPage(conn, form, sql); return page; </SPAN></li> } // 获取分页对象 </SPAN></li> protected Page getPage(Connection conn, DynaForm form, String sql) </SPAN></li> throws DaoAccessException { </SPAN></li> int p = formgetInt("p"); </SPAN></li> if (p < 1) { </SPAN></li> p = 1; </SPAN></li> } int size = formgetInt("size"); </SPAN></li> if (size < 10) { </SPAN></li> size = 10; </SPAN></li> } Page page; try { </SPAN></li> page = new JdbcPage(conn, sql, p, size); </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } return page; </SPAN></li> } }
如果是在插入数据少的时候正常,插入的数据多的时候出现这种问题的话,就说明你需要将原来的链接重新连一次,最好是在代码中每插入一定数据就重新连一次。
如果数据量很小的话,就先检查一下链接配置。
Transact_SQL小手册
Transact_SQL
--语 句 功 能
--数据 *** 作
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
CREATE INDEX --为数据库表创建一个索引
DROP INDEX --从数据库中删除索引
CREATE PROCEDURE --创建一个存储过程
DROP PROCEDURE --从数据库中删除存储过程
CREATE TRIGGER --创建一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库添加一个新模式
DROP SCHEMA --从数据库中删除一个模式
CREATE DOMAIN --创建一个数据值域
ALTER DOMAIN --改变域定义
DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户访问权限
DENY --拒绝用户访问
REVOKE --解除用户访问权限
--事务控制
COMMIT --结束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据访问特征
--程序化SQL
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以开头
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage108
when job_level = ’2’ then e_wage107
when job_level = ’3’ then e_wage106
else e_wage105
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3
begin
select @c = 100@x + @y
print @c --打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03’
select from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00’
select from employee
SELECT
select (列名) from table_name(表名) where column_name operator value
ex:(宿主)
select from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在使用like关键字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查询
--------- 除非能确保内层select只返回一个行的值,
--------- 否则应在外层where子句中用一个in限定符
select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count() from table_name group by stockname
--------- group by 将表按行分组,指定列中有相同的值
having count() = 2 --------- having选定指定的组
//下面是数据库为MySQL的 *** 作方式如果是SQLServer,将driver更改为"commicrosoftjbdcsqlserverSQLServerDriver",url更改为"jdbc:microsoft:sqlserver://localhost:port;DatabaseName=dbname"就可以了
String driver="commysqljdbcDriver";
String url="jdbc:mysql://localhost:3306/dbname";
String sql="select money from t_A,t_B where t_Anum=t_Bnum and t_Aname='小张'";//定义获取Money的SQL查询语句
ClassforName(driver);
Connection conn=DriverManagegetConnection(url,dbuser,dbpassword);//获取指定数据库的连接
Statement st=conncreateStatement();
ResultSet rs=stexecuteQuery();
if(rsnext()){//如果获取到数据
return rsgetInt(1);//返回money值
}
else{
return 0;//没有从数据库找到money
}
以上就是关于java.sql.SQLRecoverableException: 无法从套接字读取更多的数据全部的内容,包括:java.sql.SQLRecoverableException: 无法从套接字读取更多的数据、在Java中如何对数据库中的数据进行 *** 作、在java中怎样连接mysql数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)