how2j.cn


表名Hero
有字段
id
name
hp
damage
CREATE TABLE hero ( id int(11) AUTO_INCREMENT, name varchar(30) , hp float , damage int(11) , PRIMARY KEY (id) ) DEFAULT CHARSET=utf8;
CREATE TABLE hero (
  id int(11) AUTO_INCREMENT,
  name varchar(30) ,
  hp float ,
  damage int(11) ,
  PRIMARY KEY (id)
)  DEFAULT CHARSET=utf8;


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2020-07-15 习题(匿名类方法)
jsh_19869




①匿名类方法 ②多次连接更符合题意
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Test {
	List<Connection> cs = new ArrayList<Connection>();
	
	int size;

	public Test(int size) {
		this.size = size;
		init();
	}

	public void init() {

		//这里恰恰不能使用try-with-resource的方式,因为这些连接都需要是"活"的,不要被自动关闭了
		try {
			Class.forName("com.mysql.jdbc.Driver");
			for (int i = 0; i < size; i++) {
				Connection c = DriverManager
						.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin");

				cs.add(c);

			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public synchronized Connection getConnection() {
		while (cs.isEmpty()) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		Connection c = cs.remove(0);
		return c;
	}

	public synchronized void returnConnection(Connection c) {
		cs.add(c);
		this.notifyAll();
	}
	public static void main(String[] args) {
		Thread thread=null;
		
		long tic =System.currentTimeMillis();
		List<Thread> ts = new ArrayList<>();
		for(int i=0;i<100;i++)
		{
			thread =new Thread(){
				public void run(){
					
					try {
						Class.forName("com.mysql.jdbc.Driver");
					} catch (ClassNotFoundException e) {
						e.printStackTrace();
					}

					try (
							Connection c = DriverManager.getConnection
							("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
									"root", "admin");//a mistake may happen because of the limit connection that 
							//Mysql can offer!
							Statement s = c.createStatement();             
							)
					{
						String sql = "insert into hero values"
								+ "(null," + "'hero"+"'," + 313.0f + "," + 50 + ")";
						s.execute(sql);
						System.out.println("1 insert a data!");
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				}
			};
			thread.start();
			ts.add(thread);
		}
		for(Thread t:ts){//Wait until the thread go to an end!!!
			try{
				t.join();
			}catch(InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
		}
		long toc=System.currentTimeMillis();
		System.out.println("The traditional method has cost "+
				(toc-tic)+" milliseconds!");
		//*************
		Test test=new Test(10);
		test.init();
		
		tic=System.currentTimeMillis();
		List<Thread> ts1 = new ArrayList<>();
		for(int i=0;i<100;i++)
		{
			

			thread =new Thread(){
				public void run()
				{
					Connection c=test.getConnection();
					
					String statement="insert into hero values"
							+ "(null," + "'hero"+"'," + 313.0f + "," + 50 + ")";
					try(Statement st=c.createStatement()){
						st.execute(statement.toString());
						System.out.println("2 insert a data!");
					}catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					test.returnConnection(c);
				}
			};
			thread.start();
			ts1.add(thread);
		}
		for (Thread t : ts1) {//Wait until the thread go to an end!!!
            try {
                t.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
		toc=System.currentTimeMillis();
		System.out.println("The connection pool cost "+(toc-tic)+" milliseconds!");
	}
	/*
		Test cp = new Test(3);
		for (int i = 0; i < 100; i++) {
			new WorkingThread("working thread" + i, cp).start();
		}*/



}
class WorkingThread extends Thread {
	private Test cp;

	public WorkingThread(String name, Test cp) {
		super(name);
		this.cp = cp;
	}

	public void run() {
		Connection c = cp.getConnection();
		System.out.println(this.getName()+ ":\t 获取了一根连接,并开始工作"  );
		try (Statement st = c.createStatement()){

			//模拟时耗1秒的数据库SQL语句
			Thread.sleep(1000);
			st.execute("select * from hero");

		} catch (SQLException | InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		cp.returnConnection(c);
	}
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-06-10 关联外键报错怎么弄
程序猫




关联表外键的时候总是出错,显示1452,应该怎么处理
加载中

							

							


1 个答案

jqlove
答案时间:2020-06-16
这是因为表设置了外键约束,而你试图插入一条外键字段所在表纪录不存在的一个值.就会报1452错. 比如a,b两表,a表外键id值来自b表的ID,当你在a表中插入一条纪录时,id字段用了不在b表id值范围内的值,就会报此错.



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-04-18 报错的原因
2020-02-25 字体可以设置大一些吗
2019-09-20 PRIMARY KEY (id)


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 20 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 数据库-mysql-创建表 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 496725845
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图