请问JAVA ODBC编程ResultSet多线程的问题

使用ResultSet取得SQL查询的结果,并对每个next进行处理,写入文件中:
File c=new File("E:\test.txt");
FileWriter x = new FileWriter(c);
Statement stat = conn.createStatement();
ResultSet resultSet = stat.executeQuery(sql);
String result = "";
while(resultSet.next()) {
for (int i = 0; i < 100; i++) {
result = result + resultSet.getString(DEF_COLUMN(i));
}
x.write(result);
}
...
然后觉得速度太慢,想要把字符串处理放到线程中(以下简写)
LinkedBlockingQueu queue = new LinkedBlockingQueu(20);
thread 1:
do {
String result = "";
for (int i = 0; i < 100; i++) {
result = result + resultSet.getString(DEF_COLUMN(i));
}
queue.put(result);
}while(resultSet.next());
thread2:
do {
String result = queue.take();
x.write(result);
}while(!queue.isEmpty());
像上面的形式,当thread1开启一个的时候没有问题。但当开启多个thread1时,resultSet在for循环时不能被其他线程执行next否则报错,没办法只能加锁,这样虽然使用了多线程,但thread1被强制转换成单线程,速度并没有多大提升。所以我想问有没有提升resultSet的fetch速度的好方法。
ps:使用ResultSet localSet = reultSet; 尝试了一下,哈哈,localSet只是resultSet的一个引用,并没有把数据复制到localSet中,localSet.next()的时候另一个线程还是会报错。这种办法不可行。

1个回答

result = result + resultSet.getString(DEF_COLUMN(i));
用StringBuffer代替直接+运算连接,可以优化性能。

多线程没必要。

stophin
stophin 我的问题写得比较简单,获取result那一段意思不是指String性能,而是说COLUMN有几百个,这样不断fetch使用了几秒的时间,要是做到多线程中,本来生成一个String就变为生成几个String,但阻碍在于resultSet是临界资源,必须加锁,如果能把resultSet做内存映射,不断做fetch然后多个线程只管从映射的内存取数据拼接字符串那就好,不知道有没有这样的函数
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java用odbc连接oracle的一个问题
package 数据库基本操作01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; //演示:如何使用jdbc_odbc桥连接方式: public class TextOra { public static void main(String[] args) { try{ //1.加载驱动 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //得到连接 Connection ct=DriverManager.getConnection("jdbc:odbc:Oracle", "scott", "scott"); //创建连接数据库的通道 Statement sm=ct.createStatement(); //接收结果 ResultSet rs=sm.executeQuery("select * from emp"); while(rs.next()) { System.out.println("用户名"+rs.getString(2)); } rs.close(); sm.close(); ct.close(); }catch(Exception e){ e.printStackTrace(); } } } 报的错为:java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at 数据库基本操作01.TextOra.main(TextOra.java:13) 是不是需要提前下载什么东西,还是操作不对,还是代码有错误?
java数据库访问resultset小数取值问题
我用java访问oracle数据库时resultset结果集中的getfloat、getdouble等去小数的方法中得到的结果于真是在数据库里存贮的值不一样这个问题怎么解决?
java连接SqlServer数据库的问题
最近在搞java,想连个SqlServer连不上,可以加载驱动,但是连不上数据库。 数据库版本为SqlServer2017 代码如下: ``` package util; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.Date; public class DBManager { static int num; static Statement st=null; static ResultSet rs=null; static Connection con=null; static String url="jdbc:sqlserver://LAPTOP-LG07MEUA:1433;DataBaseName=Java_Data"; public static void exec(String s) throws SQLException { String user,passwd; user="sa"; passwd="1234567"; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("数据库驱动加载成功。"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //就是这里,无法链接数据库 con=DriverManager.getConnection(url, user, passwd); System.out.println("10"); st=con.createStatement(); System.out.println("1"); try { if(s.startsWith("select")||s.startsWith("SELECT")) rs=st.executeQuery(s); if(s.startsWith("delete")||s.startsWith("DELETE")) num=st.executeUpdate(s); if(s.startsWith("update")||s.startsWith("UPDATE")) num=st.executeUpdate(s); if(s.startsWith("insert")||s.startsWith("INSERT")) num=st.executeUpdate(s); System.out.println("修改成功!"); } catch(Exception e) { System.out.println("进行数据库修改时失败。"); } finally { try { if(rs!=null) rs.close(); if(st!=null) st.close(); if(con!=null) con.close(); } catch(SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) throws SQLException { int i=0; int[] Resultage=new int [20]; String[] Resultxh=new String [20]; String[] Resultxm=new String [20]; String[] Resultxb=new String [20]; String[] Resultzy=new String [20]; Date[] Resultdate=new Date [20]; String s="SELECT * FROM xsb"; DBManager.exec(s); System.out.println("学号"+""+"姓名"+" "+"性别"+" "+"出生日期"+" "+"专业"+" "+"年龄"); while(rs.next()) { Resultxh[i]=rs.getString("学号"); Resultxm[i]=rs.getString("姓名"); Resultxb[i]=rs.getString("性别"); Resultdate[i]=rs.getDate("出生日期"); Resultzy[i]=rs.getString("专业"); Resultage[i]=rs.getInt("年龄"); System.out.print(Resultxh[i]+" "); System.out.print(Resultxm[i]+" "); System.out.print(Resultxb[i]+" "); System.out.print(Resultdate[i]+" "); System.out.print(Resultzy[i]+" "); System.out.println(Resultage[i]); } } } 报错为: 数据库驱动加载成功。 Exception in thread "main" java.lang.NullPointerException at javax.xml.bind.DatatypeConverter.parseHexBinary(DatatypeConverter.java:310) at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4098) at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3160) at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43) at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981) at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168) at java.sql/java.sql.DriverManager.getConnection(Unknown Source) at java.sql/java.sql.DriverManager.getConnection(Unknown Source) at util.DBManager.exec(DBManager.java:27) at util.DBManager.main(DBManager.java:72) ``` 求大佬帮忙解答。
jdbc连接数据库,查询成功返回数据但是还是报错java.sql.SQLException: Operation not allowed after ResultSet closed 这是怎么回事?
try { Class.forName("com.mysql.jdbc.Driver"); String ur1="jdbc:mysql://localhost:3306/lingshi"; String username="root"; String password="root"; Connection con=DriverManager.getConnection(ur1,username,password); Statement stmt=con.createStatement(); String sql1="select * from guogan"; ResultSet rs1=stmt.executeQuery(sql1); while(rs1.next()){ String id=rs1.getString(1); System.out.print(id+"\t"); String name=rs1.getString("name"); System.out.print(name+"\t"); String price=rs1.getString(3); System.out.print(price+"\t"); String weight=rs1.getString("weight"); System.out.print(weight+"\t"); String birthdate=rs1.getString("birthdate"); System.out.print(birthdate+"\t"); String enddate=rs1.getString("enddate"); System.out.print(enddate+"\t"); String PD=rs1.getString("PD"); System.out.print(PD+"\t"); rs1.close(); stmt.close(); con.close(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch(SQLException e1){ e1.printStackTrace(); } 我的结果如下 1 芒果干 13.00 106g 2019.12.29 2020.12.29 12months java.sql.SQLException: Operation not allowed after ResultSet closed at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
请问在java中如何将ResultSet转换为map数组?
请问在java中如何将ResultSet转换为map数组? 感谢!
java中多线程下静态connection的问题
普遍观点是不要使用静态的连接,但是……我面临的需求情况是1.数据只查不改2.该连接只在用户登陆时使用,而其他过程有单独的连接池(与登录不是一个库),用池 觉得浪费3.可能在同一时间有几千人同时登陆,而一天内的其他时间登录次数很少。 以下是部分代码: ``` public class CWJdbcConnection { private static Map<String, String> map = new GetFile().getFile( "FcgDriverClassName", "FcgIp", "FcgName", "FcgPasswd");//获取连接信息 private static int flag = 0; private static Connection conn; private PreparedStatement ps = null; private boolean isClosed = false; static { try { Class.forName(map.get("fcgDriverClassName")); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public CWJdbcConnection() { CWJdbcConnection.doConnection(1); } public ResultSet doSql(String sql) { if (conn == null) try { conn = DriverManager.getConnection(map.get("fcgIp").toString(), map.get("fcgName").toString(), map.get("fcgPasswd") .toString()); } catch (SQLException e) { e.printStackTrace(); } try { ps = conn.prepareStatement(sql); return ps.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } return null; } public void close() { if (isClosed) return; if (ps != null) try { ps.close(); } catch (SQLException e) { } isClosed = true; CWJdbcConnection.doConnection(-1); } private synchronized static void doConnection(int a) { flag += a; if (flag < 0) flag = flag / 0;//不要嘲笑我…… if (flag == 0 && conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } } ``` 使用方法是: ``` CWJdbcConnection cw = new CWJdbcConnection(); ResultSet rs = cw.doSql(sql); doRS(rs);//进行操作 cw.close(); ``` 我在这里向大家请教的是:这个类在并发的情况下会出现什么问题? PS:在手头没有测试工具和不熟悉程序测试的情况下,我仅仅是开了100个线程,让它们并发读数据,暂时没发现问题,线程全部结束后Connection也都关闭了。但是我不放心啊!!
java数据库resultset取值是地址而不是数据库存的数据
ResultSetMetaData metaData = resultSet.getMetaData(); List<Hashtable<String, Object>> rows = new ArrayList<Hashtable<String, Object>>(); while (resultSet.next()) { Hashtable<String, Object> row = new Hashtable<String, Object>(); for (int i = 1; i <= metaData.getColumnCount(); i++) { System.out.println(metaData.getColumnName(i)); row.put(metaData.getColumnName(i), resultSet.getObject(i)); } resultSet.getobject(i)从数据库取出的值是地址,而我从数据库中查的是数字0
java代码连接odbc数据库出现报错
![图片说明](https://img-ask.csdn.net/upload/201909/09/1568014954_294877.png) ![图片说明](https://img-ask.csdn.net/upload/201909/09/1568014963_904893.png) public static void main(String[] args) { //创建驱动名称,这里我们使用的是odbc String driverName="sun.jdbc.odbc.JdbcOdbcDriver"; //创建odbc的名字 String odbcName="jdbc:odbc:mymysql"; //用户名 String userName="root"; //密码 String password=""; //创建一个连接对象 Connection conn=null; //sql语句执行对象 Statement st=null; //结果集对象 ResultSet rs=null; String sql="select * from t_test"; //1.加载启动程序 try { Class.forName(driverName); conn=DriverManager.getConnection(odbcName, userName, password); System.out.println("连接成功!!"); st=conn.createStatement(); rs=st.executeQuery(sql); System.out.println("id\t登录名"); while(rs.next()){ System.out.println("id:"+rs.getInt(1)+"\t"+rs.getString(2)); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { if(rs!=null){ rs.close(); } if(st!=null){ st.close(); } if(conn!=null){ conn.close(); } System.out.println("关闭成功!!"); } catch (SQLException e) { e.printStackTrace(); } } }
Java WEB 连接数据库的登录界面失败?
连接数据库是成功的,但是输入用户名和密码后跳转到错误页面 有几段代码不太确定对不对,请帮忙看一看 //login.jsp ``` <form name="form1" method="post" action="manager.do?action=login"> ``` //struts-config.xml ``` <action name="managerForm" path="/manager" scope="request" type="com.action.Manager" validate="true"> <forward name="managerLoginok" path="/main.jsp" /> <forward name="error" path="/error.jsp" /> </action> ``` //Manager.java ``` package com.action; import org.apache.struts.action.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.actionForm.ManagerForm; import com.dao.ManagerDAO; import javax.servlet.http.HttpSession; public class Manager extends Action { private ManagerDAO managerDAO = null; public Manager() { this.managerDAO = new ManagerDAO(); } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String action = request.getParameter("action"); if (action == null || "".equals(action)) { return mapping.findForward("error"); } else if ("login".equals(action)) { return managerLogin(mapping, form, request, response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); } // 管理员身份验证 public ActionForward managerLogin(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ManagerForm managerForm = (ManagerForm) form; //将接收到的表单信息强制转换成ActionForm类型 managerForm.setAd_name(managerForm.getAd_name()); managerForm.setAd_pwd(managerForm.getAd_pwd()); int ret = managerDAO.checkManager(managerForm); System.out.print("验证结果ret的值:" + ret); if (ret == 1) { //将登录到系统的管理员名称保存到session HttpSession session = request.getSession(); session.setAttribute("manager", managerForm.getAd_name()); return mapping.findForward("managerLoginok"); } else { request.setAttribute("error", "您输入的管理员名称或密码错误!"); return mapping.findForward("error"); } } } ``` //ConnDB.java ``` //执行查询语句 public ResultSet executeQuery(String sql) { try { conn=getConnection(); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql); } catch(SQLException ex){ System.err.println(ex.getMessage()); } return rs; } ``` //ManagerDAO.java ``` //管理员身份验证 public int checkManager(ManagerForm managerForm) { int flag = 0; ChStr chStr=new ChStr(); String sql = "SELECT * FROM Ad_info where ad_name='" + chStr.filterStr(managerForm.getAd_name()) + "'"; ResultSet rs = conn.executeQuery(sql); try { if (rs.next()) { String pwd = chStr.filterStr(managerForm.getAd_pwd()); //获取输入的密码并过滤输入字符串中的危险字符 if (pwd.equals(rs.getString(3))) { flag = 1; } else { flag = 0; } }else{ flag = 0; } } catch (SQLException ex) { flag = 0; }finally{ conn.close(); } return flag; } ``` 大概应该是这几段代码的原因,但是不清楚应该怎么修改,请帮忙看一下
java多线程高并发下的oracle数据库异常
代码的功能是生成一个随机的序列化的订单号,正常的情况下一个一个跑没问题,在进行压力测试的时候,多线程高并发下,oracle的create语句就会报错,说是 java.lang.RuntimeException: org.springframework.jdbc.BadSqlGrammarException: ConnectionCallback; bad SQL grammar []; nested exception is java.sqlSQLException: ORA-00955: 名称已由现有对象使用 求大神看下。 代码如下: ``` package utils.spring; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCallback; import org.springframework.stereotype.Component; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import utils.Lang; import javax.sql.DataSource; import java.sql.*; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 序列发生器(可用于高并发、可回收等场景) * * @author lujijiang * */ @Component @ConfigurationProperties(prefix = "seqGenerator") final public class SequenceGenerator implements InitializingBean { interface Atom<T> { T atom(Connection connection) throws Exception; } public static <T> T atom(Connection connection, Atom<T> atom) throws Exception { connection.setAutoCommit(false); connection .setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); try { T obj = atom.atom(connection); connection.commit(); return obj; } catch (Exception e) { connection.rollback(); throw e; } } static Map<String, String> createSqlMap = new ConcurrentHashMap<String, String>(); static { createSqlMap .put("h2", "CREATE TABLE %s (v$key BIGINT NOT NULL,v$key$ varchar(256),v$seq BIGINT NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); createSqlMap .put("mysql", "CREATE TABLE %s (v$key BIGINT NOT NULL,v$key$ varchar(256),v$seq BIGINT NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); createSqlMap .put("informix", "CREATE TABLE %s (v$key DECIMAL(16,0) NOT NULL,v$key$ varchar(256),v$seq DECIMAL(16,0) NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); createSqlMap .put("oracle", "CREATE TABLE %s (v$key NUMBER(16,0) NOT NULL,v$key$ varchar2(256),v$seq NUMBER(16,0) NOT NULL,v$state CHAR(1) NOT NULL, PRIMARY KEY (v$key,v$seq))"); } static Map<String, String> insertSqlMap = new ConcurrentHashMap<String, String>(); static { insertSqlMap .put("h2", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select ifnull(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); insertSqlMap .put("mysql", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select ifnull(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); insertSqlMap .put("informix", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select nvl(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); insertSqlMap .put("oracle", "insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',(select nvl(max(t.v$seq),%d)+%d from %s t where t.v$key=%d),'1')"); } /** * 事务模版 */ TransactionTemplate transactionTemplate; /** * 是否使用新事务 */ boolean newTransaction = true; /** * JDBC模版 */ JdbcTemplate jdbcTemplate; /** * 尝试次数(默认10次) */ int tryTime = 10; /** * 数据库类型 */ String databaseType; /** * 表名 */ private String tableName; /** * 容量 */ private int capacity = 25; /** * 步进 */ private int step = 1; /** * 是否可回收序列号 */ protected boolean recyclable; @Autowired public void setTransactionManager( PlatformTransactionManager transactionManager) { if (transactionManager != null) { transactionTemplate = new TransactionTemplate(transactionManager); transactionTemplate .setIsolationLevel(TransactionTemplate.ISOLATION_READ_COMMITTED); transactionTemplate .setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED); } } public boolean isNewTransaction() { return newTransaction; } public void setNewTransaction(boolean newTransaction) { this.newTransaction = newTransaction; } public TransactionTemplate getTransactionTemplate() { return transactionTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Autowired public void setDataSource(DataSource dataSource) { if (jdbcTemplate == null) { jdbcTemplate = new JdbcTemplate(dataSource); } } public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; } public void setTryTime(int tryTime) { this.tryTime = tryTime; } public void setDatabaseType(String databaseType) { if (databaseType != null) { databaseType = databaseType.trim().toLowerCase(); this.databaseType = databaseType; } } public void setTableName(String tableName) { this.tableName = tableName == null ? null : tableName.trim(); } public void setCapacity(int capacity) { this.capacity = capacity; } public void setStep(int step) { this.step = step < 1 ? 1 : step; } public void setRecyclable(boolean recyclable) { this.recyclable = recyclable; } /** * 创建序列 * * @param name * @param length * @param start * @return */ public String generateSequence(String name, int length, long start) { final long key = generateKey(name); try { return generateSequence(key, length, start, name); } catch (Throwable t) { createSequenceTable();//错误就是定位在这里 int time = tryTime >= 0 ? tryTime : 10000; while (time-- > 0) { try { return generateSequence(key, length, start, name); } catch (Throwable e) { } } throw new RuntimeException("Generate sequence failure", t); } } private long generateKey(String name) { return 10000000000L + name.trim().hashCode(); } /** * 创建序列 * * @param key * @param length * @return */ public String generateSequence(String key, int length) { return generateSequence(key, length, 0); } /** * 创建序列 * * @param key * @return */ public String generateSequence(String key) { return generateSequence(key, 6); } private synchronized void createSequenceTable() { try { jdbcTemplate.execute(new ConnectionCallback<Integer>() { public Integer doInConnection(Connection connection) throws SQLException, DataAccessException { ResultSet rs = connection.getMetaData().getTables(null, null, tableName, null); try { while (rs.next()) { return 1; } } finally { rs.close(); } String createSql = String.format( createSqlMap.get(databaseType), tableName); Statement statement = connection.createStatement(); try { statement.execute(createSql);//错误就是定位在这里 } finally { statement.close(); } return 0; } }); } catch (Throwable t) { throw new RuntimeException(t); } } private String generateSequence(final long key, final int length, final long start, final String name) { if (newTransaction) { try { Connection connection = jdbcTemplate.getDataSource() .getConnection(); try { return atom(connection, new Atom<String>() { @Override public String atom(Connection connection) throws Exception { if (recyclable) { String no = getRecoveredSequence(connection, key, length); if (no != null) { return no; } } Statement statement = connection.createStatement(); try { String insertSql = String.format(insertSqlMap .get(databaseType), tableName, key, name.replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(connection, insertSql); String querySql = String .format("select max(v$seq) from %s where v$key=%d and v$state='1'", tableName, key); ResultSet rs = statement.executeQuery(querySql); try { while (rs.next()) { Long max = rs.getLong(1); if (max < start) {// 重新初始化 String deleteSql = String .format("delete from %s where v$key=%d and v$state='1'", tableName, key); execute(connection, deleteSql); insertSql = String.format( insertSqlMap .get(databaseType), tableName, key, name.replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(connection, insertSql); return fillLeftZero(start, length); } if (capacity > 0 && max % capacity == 0) { String deleteSql = String .format("delete from %s where v$key=%d and v$seq<>%d and v$state='1'", tableName, key, max); execute(connection, deleteSql); } return fillLeftZero(max, length); } } finally { rs.close(); } } finally { statement.close(); } throw new IllegalStateException( SequenceGenerator.this.getClass() .getSimpleName() + "无法获取单号,不可能发生的异常"); } }); } finally { connection.close(); } } catch (Exception e) { throw Lang.unchecked(e); } } return getTransactionTemplate().execute( new TransactionCallback<String>() { public String doInTransaction(TransactionStatus ts) { try { if (recyclable) { String no = jdbcTemplate .execute(new ConnectionCallback<String>() { public String doInConnection( Connection connection) throws SQLException, DataAccessException { return getRecoveredSequence( connection, key, length); } }); if (no != null) { return no; } } String insertSql = String.format(insertSqlMap .get(databaseType), tableName, key, name .replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(insertSql); String querySql = String .format("select max(v$seq) from %s where v$key=%d and v$state='1'", tableName, key); Long max = jdbcTemplate.queryForObject(querySql, Long.class); if (max < start) {// 重新初始化 String deleteSql = String .format("delete from %s where v$key=%d and v$state='1'", tableName, key); execute(deleteSql); insertSql = String.format(insertSqlMap .get(databaseType), tableName, key, name.replace("'", "''"), start < 0 ? 0 : start, step, tableName, key); execute(insertSql); return fillLeftZero(start, length); } if (capacity > 0 && max % capacity == 0) { String deleteSql = String .format("delete from %s where v$key=%d and v$seq<>%d and v$state='1'", tableName, key, max); execute(deleteSql); } return fillLeftZero(max, length); } catch (Throwable t) { ts.isRollbackOnly(); throw new RuntimeException(t); } } }); } /** * 参数化执行SQL * * @param sql * @param args * @return */ protected int execute(String sql, final Object... args) { return jdbcTemplate.execute(sql, new PreparedStatementCallback<Integer>() { public Integer doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException { if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } } return ps.executeUpdate(); } }); } /** * 参数化执行SQL * * @param sql * @param args * @return * @throws SQLException */ protected int execute(Connection conn, String sql, final Object... args) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql); try { if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } } return ps.executeUpdate(); } finally { ps.close(); } } protected String fillLeftZero(Long max, int length) { StringBuilder sb = new StringBuilder(); sb.append(max); if (sb.length() >= length) { return sb.substring(sb.length() - length); } else { for (int i = sb.length(); i < length; i++) { sb.insert(0, '0'); } } return sb.toString(); } /** * 获取已回收的序列 * * @param connection * @param key * @throws SQLException */ protected String getRecoveredSequence(Connection connection, long key, int length) throws SQLException { Statement statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); try { String querySql = String .format("select v$key,v$seq,v$state from %s where v$key = %d and v$state<>'1' for update", tableName, key); statement.executeQuery(querySql); querySql = String .format("select v$key,v$seq,v$state from %s where v$key = %d and v$state<>'1' order by v$seq asc", tableName, key); ResultSet rs = statement.executeQuery(querySql); try { while (rs.next()) { try { Long min = rs.getLong(2); rs.updateString(3, "1"); rs.updateRow(); return fillLeftZero(min, length); } catch (Throwable ex) { } } } finally { rs.close(); } } finally { statement.close(); } return null; } /** * 回收序列号 * * @param name * @param sequence */ public void recoveredSequence(final String name, final String sequence) { final long key = generateKey(name); final long seq = Long.valueOf(sequence); if (newTransaction) { try { Connection connection = jdbcTemplate.getDataSource() .getConnection(); try { atom(connection, new Atom<Object>() { public Object atom(Connection connection) throws Exception { String updateSql = String .format("update %s set v$state='0' where v$key=%d and v$seq=%d", tableName, key, seq); int count = execute(connection, updateSql); if (count == 0) { String insertSql = String .format("insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',%d,'0')", tableName, key, name.replace("'", "''"), seq); execute(connection, insertSql); } return null; } }); connection.commit(); } finally { connection.close(); } } catch (Exception e) { throw Lang.unchecked(e); } } else { transactionTemplate.execute(new TransactionCallback<Integer>() { public Integer doInTransaction(TransactionStatus status) { try { String updateSql = String .format("update %s set v$state='0' where v$key=%d and v$seq=%d", tableName, key, seq); int count = execute(updateSql); if (count == 0) { String insertSql = String .format("insert into %s(v$key,v$key$,v$seq,v$state) values(%d,'%s',%d,'0')", tableName, key, name.replace("'", "''"), seq); execute(insertSql); } return null; } catch (Throwable t) { status.isRollbackOnly(); throw new RuntimeException(t); } } }); } } public void afterPropertiesSet() throws Exception { if (this.databaseType == null) { throw new IllegalArgumentException(String.format( "Property '%s' is required", "databaseType")); } if (databaseType != null) { if (!createSqlMap.containsKey(databaseType)) { throw new IllegalStateException(String.format( "Unsupported database type:%s", databaseType)); } } if (this.jdbcTemplate == null) { throw new IllegalArgumentException(String.format( "Property '%s' or '%s' is required", "dataSource", "jdbcTemplate")); } if (this.tableName == null) { throw new IllegalArgumentException(String.format( "Property '%s' is required", "tableName")); } if (!tableName.matches("[a-zA-Z_][a-zA-Z0-9_]*") || tableName.length() > 16) { throw new IllegalStateException(String.format( "Illegal tableName:%s", tableName)); } if (!this.newTransaction) { if (this.transactionTemplate == null) { throw new IllegalArgumentException(String.format( "Property '%s' is required", "transactionManager")); } } } } ``` java.lang.RuntimeException: org.springframework.jdbc.BadSqlGrammarException: ConnectionCallback; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-00955: 名称已由现有对象使用 at utils.spring.SequenceGenerator.createSequenceTable(SequenceGenerator.java:272) at utils.spring.SequenceGenerator.generateSequence(SequenceGenerator.java:202) at utils.spring.SequenceGenerator.generateSequence(SequenceGenerator.java:227) at cart.service.service.OrderService.generateOrderNo(OrderService.java:806) at cart.service.service.OrderService.saveVirtualGoodsToOrder(OrderService.java:220) at cart.service.service.OrderService$$FastClassBySpringCGLIB$$19f99be7.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) at cart.service.service.OrderService$$EnhancerBySpringCGLIB$$feb8eef.saveVirtualGoodsToOrder(<generated>) at cart.service.apiImpl.OrderMainApiImpl.saveVirtualGoodsToOrder(OrderMainApiImpl.java:223) at cart.service.apiImpl.OrderMainApiImpl$$FastClassBySpringCGLIB$$fa3518e.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651) at cart.service.apiImpl.OrderMainApiImpl$$EnhancerBySpringCGLIB$$497f044.saveVirtualGoodsToOrder(<generated>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.weibo.api.motan.rpc.DefaultProvider.invoke(DefaultProvider.java:57) at com.weibo.api.motan.rpc.AbstractProvider.call(AbstractProvider.java:47) at com.weibo.api.motan.filter.AccessLogFilter.filter(AccessLogFilter.java:56) at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$2.call(ProtocolFilterDecorator.java:150) at utils.rpc.motan.filter.OpenEntityManagerInMotanFilter.filter(OpenEntityManagerInMotanFilter.java:171) at com.weibo.api.motan.protocol.support.ProtocolFilterDecorator$2.call(ProtocolFilterDecorator.java:150) at com.weibo.api.motan.transport.ProviderMessageRouter.call(ProviderMessageRouter.java:96) at com.weibo.api.motan.transport.ProviderProtectedMessageRouter.call(ProviderProtectedMessageRouter.java:79) at com.weibo.api.motan.transport.ProviderMessageRouter.handle(ProviderMessageRouter.java:91) at com.weibo.api.motan.transport.support.DefaultRpcHeartbeatFactory$HeartMessageHandleWrapper.handle(DefaultRpcHeartbeatFactory.java:82) at com.weibo.api.motan.transport.netty.NettyChannelHandler.processRequest(NettyChannelHandler.java:139) at com.weibo.api.motan.transport.netty.NettyChannelHandler.access$000(NettyChannelHandler.java:47) at com.weibo.api.motan.transport.netty.NettyChannelHandler$1.run(NettyChannelHandler.java:116) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: org.springframework.jdbc.BadSqlGrammarException: ConnectionCallback; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-00955: 名称已由现有对象使用 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:99) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:360) at utils.spring.SequenceGenerator.createSequenceTable(SequenceGenerator.java:247) ... 39 more Caused by: java.sql.SQLException: ORA-00955: 名称已由现有对象使用 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210) at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:961) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190) at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1726) at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1696) at utils.spring.SequenceGenerator$1.doInConnection(SequenceGenerator.java:264) at utils.spring.SequenceGenerator$1.doInConnection(SequenceGenerator.java:247) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:353) ... 40 more
java中ResultSet.getDate()读取正常,但是放到list中却读取出null值?
这是Student类 package JDBCTest; import java.util.Date; public class Student { private int id; private String name; private boolean gender; private Date birthday; public Student() { } public Student(int id, String name, boolean gender, Date birthday) { this.id = id; this.name = name; this.gender = gender; this.birthday = birthday; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isGender() { return gender; } public void setGender(boolean gender) { this.gender = gender; } public Date getBirthday(java.sql.Date birthday) { return this.birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", gender=" + gender + ", birthday=" + birthday + '}'; } } package JDBCTest; import java.sql.*; public class Demo6 { public static void main(String[] args) throws SQLException { Student student = new Student(); Connection conn = JdbcUtil.getConnection(); PreparedStatement ps = conn.prepareStatement("select * from stu1 where id =?"); ps.setInt(1,2); ResultSet rs = ps.executeQuery(); if (rs.next()){ student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setGender(rs.getBoolean("gender")); student.getBirthday(rs.getDate("birthday")); } System.out.println(rs.getDate("birthday")); JdbcUtil.close(conn, ps, rs); System.out.println(student); } } 为什么这段代码中rs.getDate("birthday")读取是正常的,但是 student.getBirthday(rs.getDate("birthday"));读取出来的却是null值?
Java JButton事件监听,按下后,没有反应?
给JButton注册了事件监听器,但是按下后没有反应,下面是代码部分。代码无错误。 ---- 下面只有关于按钮部分的代码 --- **我写了一个生成相关文件的图形界面,总代码较长,放到了后面,真心希望大佬可以给出解答!!!** --- _**是不是相关的逻辑层面出了错误呢?大佬给些相关方面的提示也可以,谢谢啦!**_ ---- **真的想了好久好久,始终不知道错误出在哪里。** ``` 按钮生成函数 public static JButton[] createButton (int x) { JButton[] jb = new JButton[x]; //将生成的button放入JButton型数组 for(int k = 0; k < x; k++) { JButton button = new JButton(getAllTableNames(ProjectConfig.DATABASE_NAME).get(k)); Dimension preferredSize = new Dimension(280, (500-50)/(getAllTableNames(ProjectConfig.DATABASE_NAME).size()+1)); button.setPreferredSize(preferredSize); jb[k] = button; } return jb; } 按钮注册事件监听,并且增加到界面的函数 //添加button list = getAllTableNames(ProjectConfig.DATABASE_NAME); number = list.size(); for ( int i = 0; i < number; i++){ int j = i; //增添按钮 gui.add(createButton(number)[j]); //实现按钮监听 createButton(number)[j].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("hello"); } }); System.out.println("hello!!!!"); } ``` ---- 这是总代码: ``` package com.springjdbc.demo; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Gui extends JFrame{ /** * */ private static final long serialVersionUID = -3735744874051620286L; public static List<String> list; //存放获取的数据表名 public static int number; //数据表的数量 JLabel label = new JLabel("数据表列表"); public Gui (String title) { super(title); this.setLayout( new FlowLayout( FlowLayout.CENTER));//布局模式 this.add(label); } public static void main(String[] args) throws SQLException { List<String> tables = getAllTableNames(ProjectConfig.DATABASE_NAME); System.out.println(tables); //设置窗口属性 Gui gui = new Gui("数据库代码生成"); gui.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE);//点击关闭图标是关闭窗口 gui.setSize(350, 550);//设置窗口大小 gui.setVisible(true);//设置窗口可见w gui.setLocation(200, 100);//设置左上角坐标 //添加button list = getAllTableNames(ProjectConfig.DATABASE_NAME); number = list.size(); for ( int i = 0; i < number; i++){ int j = i; //增添按钮 gui.add(createButton(number)[j]); //实现按钮监听 createButton(number)[j].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("hello"); } }); System.out.println("hello!!!!"); } } public static JButton[] createButton (int x) { JButton[] jb = new JButton[x]; //将生成的button放入JButton型数组 for(int k = 0; k < x; k++) { JButton button = new JButton(getAllTableNames(ProjectConfig.DATABASE_NAME).get(k)); Dimension preferredSize = new Dimension(280, (500-50)/(getAllTableNames(ProjectConfig.DATABASE_NAME).size()+1)); button.setPreferredSize(preferredSize); jb[k] = button; } return jb; } //保证只是注册一次驱动 static{ try { Class.forName(ProjectConfig.JDBC_DIVER_CLASS_NAME); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } /** * 获取连接 * @return * @throws SQLException */ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(ProjectConfig.JDBC_URL, ProjectConfig.JDBC_USERNAME, ProjectConfig.JDBC_PASSWORD); } public static List<String> getAllTableNames( String databasename) { List<String> tableNames = new ArrayList<String>(); Connection conn = null; try { conn = getConnection(); DatabaseMetaData dbmd = conn.getMetaData(); // 表名列表 ResultSet rest = dbmd.getTables(databasename, null, null, new String[] { "TABLE" }); // 输出 table_name while (rest.next()) { tableNames.add(rest.getString("TABLE_NAME")); } } catch (SQLException e) { e.printStackTrace(); } return tableNames; } } ```
如何通过多线程取出ResultSet里面的数据?
如题所示,我自己写了一个demo,但是发现有点问题,不知道如何解决,求大神看看问题在哪? 如果用三个task就会少两条数据,如果是四个task,就少3条数据,以此类推~ main方法 ![图片说明](https://img-ask.csdn.net/upload/201606/12/1465717422_269143.png) 取数据的线程 ![图片说明](https://img-ask.csdn.net/upload/201606/12/1465717386_807341.png) model ![图片说明](https://img-ask.csdn.net/upload/201606/12/1465717403_622716.png)
哪位大佬帮我看看是什么问题 while 不能嵌套吗?还是说while (resultSet.next())不能嵌套?
循环第一遍是正常的 然后就报错【从数据类型 varchar 转换为 numeric 时出错】下面 ResultSetMetaData reMetaData = resultSet.getMetaData(); //数据集的列数 int cot(); for (int i = 1; i <= columnCount; i++) { String columnLabel = reMetaData.getColumnLabel(i); String value = resultSet.getString(columnLabel); jsonObject.put(columnLabel, value); } //准备数据 jsonData = JSON.toJSONString(jsonObject); entCode = resultSet.getString("enterprise_code"); orgCode = resultSet.getString("graindepot_gb_code"); //调用参数输出 System.out.println("content:"+content); System.out.println("entCode:"+entCode); System.out.println("orgCode"+orgCode); System.out.println("jsonData:"+jsonData); //调用WebService进行上传 } } System.out.println("---执行成功---"); } catch (Exception e) { System.out.println("---执行失败---"); e.printStackTrace(); }finally{ System.out.println("---[" + content + "]--- 结束!"); } } ```
怎么把数据库内容显示在网页table上?已有JAVA后台代码。求大佬帮忙
package com.lixing.tool; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class JDBC { private static String user="root"; private static String pwd="root"; private static String url="jdbc:mysql://127.0.0.1:3306/vido"; private static String driver="com.mysql.jdbc.Driver"; //��ȡ���ݿ����ӷ��� public static Connection getConnection() throws ClassNotFoundException, SQLException{ Class.forName(driver); return DriverManager.getConnection(url, user, pwd); } } package com.lixing.controller; import java.io.File; import java.io.IOException; import java.util.UUID; import javax.accessibility.AccessibleRelation; import javax.xml.ws.Response; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import com.lixing.dao.GameInfoDao; import com.lixing.dao.UserInfoDao; import com.lixing.pojo.PageData; import com.lixing.pojo.UserInfo; @Controller public class UserInfoController { //......................................中间省略部分是数据上传功能 @RequestMapping("/queryGameInfoList.do") public @ResponseBody PageData findGameInfo(int page,int limit){ System.out.println("==============="+page); System.out.println("==============="+limit); //��ѯ�û���Ϣ�����ݴ��������������������з�ҳ GameInfoDao dao=new GameInfoDao(); return dao.findGameInfo(page, limit); } @RequestMapping("deleGameInfo.do") public @ResponseBody int deleteGameInfo(int id){ System.out.println("ɾ���û��ķ���======"+id); GameInfoDao dao=new GameInfoDao(); return dao.deleGameInfoById(id); } } package com.lixing.pojo; public class PageData { private String code; private String msg; private int count; private Object data; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } } package com.lixing.pojo; public class GameInfo { private int id; private String game; private String type; public int getid() { return id; } public void setid(int id) { this.id = id; } public String getgame() { return game; } public void setgame(String game) { this.game = game; } public String gettype() { return type; } public void settype(String type) { this.type = type; } } package com.lixing.dao; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.lixing.pojo.GameInfo; import com.lixing.pojo.PageData; import com.lixing.pojo.UserInfo; import com.lixing.tool.JDBC; import java.sql.PreparedStatement; public class GameInfoDao { //中间省略部分为数据上传功能呢 public PageData findGameInfo(int page,int limit){ PageData p=new PageData(); List<GameInfo> list=new ArrayList<GameInfo>(); p.setCode("1"); p.setMsg("閿熸枻鎷烽敓鎹风》鎷烽敓鏂ゆ嫹閿熷眾甯�"); try { page = (page-1)*limit; //閿熸帴绗》鎷烽敓鏂ゆ嫹閿熸枻鎷峰 Connection con=JDBC.getConnection(); String sql="select * from czgame limit ?,?"; PreparedStatement ps=con.prepareStatement(sql); ps.setInt(1, page); ps.setInt(2, limit); ResultSet rs=ps.executeQuery(); boolean ifg=false; while(rs.next()){ //閿熸枻鎷烽敓鏂ゆ嫹閿熸枻鎷蜂竴閿熸枻鎷烽敓鏂ゆ嫹閿熸嵎锝忔嫹閿熸枻鎷烽敓鏂ゆ嫹閿熸枻鎷蜂竴閿熸枻鎷穟serInfo閿熸枻鎷烽敓鏂ゆ嫹 GameInfo game=new GameInfo(); ifg=true; game.setid(rs.getInt(1)); game.setgame(rs.getString(2)); game.settype(rs.getString(3)); list.add(game); } if(ifg){ p.setCode("0"); p.setMsg("閿熸枻鎷烽敓鏂ゆ嫹閿熸枻鎷烽敓鎹锋垚鐧告嫹閿熸枻鎷�"); p.setCount(findGameInfoCount()); //閿熸枻鎷峰彇閿熺煫浼欐嫹閿熸枻鎷烽敓鏂ゆ嫹閿熸枻鎷烽敓鏂ゆ嫹 p.setData(list); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return p; } public int findGameInfoCount(){ Connection con; int num=0; try { con = JDBC.getConnection(); String sql="select count(*) from czgame "; PreparedStatement ps=con.prepareStatement(sql); ResultSet rs=ps.executeQuery(); if(rs.next()){ num=rs.getInt(1); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return num; } public int deleGameInfoById(int id){ int num=0; try { Connection con=JDBC.getConnection(); String sql="delete from czgame where id=?"; PreparedStatement ps=con.prepareStatement(sql); ps.setInt(1, id); num=ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } return num; } } 数据库表很简单 ID game type 用jquey.JS 只是不会在页面上使用这些后台JAVA代码显示网页页面上 最后能实现页面按钮对数据库数据进行删除 以及将数据库数据显示在页面上即可
Java web报错,Unknown database 'testdb'
在运行jsp插入数据一直报错Unknown database 'testdb',Mysql是8.0的,试过其他办法都没有用。页面报500错误 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>添加图书信息</title> </head> <body> <p>请输入图书信息</p> ${message}<br> <form action="addBook" method="post"> 书号:<input type="text" name="isbn"/><br> 书名:<input type="text" name="title"/><br> 价格:<input type="text" name="price"/><br> <input type="submit" value="确定"/><input type="reset" value="重置"/> </form> </body> </html> ``` ``` ``` package servlet; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.mysql.jdbc.Statement; @WebServlet("/addBook") public class BookServlet extends HttpServlet { private static final long serialVersionUID = 1L; Connection dbconn = null; @Override public void init() { try { Class.forName("com.mysql.cj.jdbc.Driver"); dbconn = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/testDB?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true", "root", "123456"); } catch (ClassNotFoundException el) { getServletContext().log("驱动程序类找不到"); } catch (SQLException e2) { System.out.println(e2); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String isbn = request.getParameter("isbn"); String title = request.getParameter("title"); float price = Float.parseFloat(request.getParameter("price")); String message = ""; try { String sql = "INSERT INTO books (isbn,title,price) VALUES(?,?,?)"; PreparedStatement pstmt = dbconn.prepareStatement(sql); pstmt.setString(1, isbn); pstmt.setString(2, title); pstmt.setFloat(3, price); int num = pstmt.executeUpdate(); if (num == 1) { message = "插入记录成功"; } else { message = "插入记录失败"; } request.setAttribute("message", message); request.getRequestDispatcher("jsp/add-book.jsp").forward(request, response); } catch (SQLException e) { message = e.getMessage(); request.setAttribute("message", message); request.getRequestDispatcher("jsp/add-book.jsp").forward(request, response); } } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doGet(req, resp); } } ``` ``` <?xml version="1.0" encoding="UTF-8"?> <Context reloadable = "true"> <Resource name="jdbc/testDB" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="root" password="123456" maxwait="5000" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/testdb?useSLL=true&amp;useUnicode=true&amp;allowPublicKeyRetrieval=true;characterEncoding=utf-8" /> </Context> ``
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器]
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间不匹配 import java.sql.*; public class example { public static void main(String[] args) { // TODO 自动生成的方法存根 Connection con; Statement sql; ResultSet rs; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e){ System.out.print(e); } try{ con = DriverManager.getConnection("jdbc:odbc:star","",""); sql = con.createStatement(); rs = sql.executeQuery("SELECT * FROM employee WHERE salary > 1900"); while(rs.next()){ String number = rs.getString(1); String name = rs.getString(2); Date date = rs.getDate("birthday"); double salary = rs.getDouble("salary"); System.out.printf("% - 4s",number); System.out.printf("% - 6s",name); System.out.printf("% - 15s",date.toString()); System.out.printf("% 6s\n",salary); } con.close(); } catch(SQLException e){ System.out.println(e); } } } 以上代码在eclipse上运行出现错误,系统是64位的,用的是sysWoW64中的odbcad32创建的数据源,求解啊,小白一个= =
hive执行正确,hive-jdbc 别名 报语法错误
SQL在hive中执行是正确的,但是使用hive-jdbc ResultSet rs = st.executeQuery(sql) 执行,却在别名处报语法错误 ![图片说明](https://img-ask.csdn.net/upload/202001/03/1578040942_99148.png) SQL: SELECT aa.customerid FROM ( (SELECT customerid FROM oder WHERE saleno = 101870 AND orderstatus NOT IN (1000, 1007, 1008) AND obcustomertype != 1004 AND source = 1001 AND zipcode != 'null') as `aa` LEFT JOIN (SELECT customerid FROM oder WHERE saleno IN ( 101345, 101955, 101000, 101099, 101362 ) AND orderstatus NOT IN (1000, 1007, 1008) AND obcustomertype != 1004 AND source = 1001 AND zipcode != 'null') as `bb` ON aa.customerid = bb.customerid ) WHERE bb.customerid IS NULL
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
相关热词 c# 二进制截断字符串 c#实现窗体设计器 c#检测是否为微信 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片
立即提问