腾讯云上搭建MySql并且通过SSH通道使用Java来操作数据库的解决方案
因为接下来要做几个带数据库的小软件玩玩,就准备搞个数据库玩玩,但是一路肥肠的艰辛啊(汗
1.申请腾讯云
2.安全组那边要打开端口,详情看设置里,通俗易懂,我们需要的就是22和3306
3.安装mysql
https://blog.csdn.net/weixx3/article/details/80782479
跟我一样是Ubuntu18.04
4.远程看一下数据库:
如果遇到问题https://blog.csdn.net/homewm/article/details/81316852
(我用的是Navicat,软件很强大)
5.使用jdbc通过ssh通道连接mysql并且进行操作:
参考https://stackoverflow.com/questions/1968293/connect-to-remote-mysql-database-through-ssh-using-java
果然国外的大佬多。。
import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.sql.*; public class UpdateMySqlDatabase { static int lport; static String rhost; static int rport; public static void go(){ String user = "****"; //云服务器账号密码 String password = "****"; String host = "****"; //在这填写你的云服务器IP int port=22; try { JSch jsch = new JSch(); Session session = jsch.getSession(user, host, port); lport = 22; //Liunx都是走22 rhost = "localhost"; //因为是虚拟机上的数据库 rport = 3306; //数据库指定端口 session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); System.out.println("Establishing Connection..."); session.connect(); int assinged_port=session.setPortForwardingL(lport, rhost, rport); System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport); } catch(Exception e){System.err.print(e);} } public static void main(String[] args) { try{ go(); } catch(Exception ex){ ex.printStackTrace(); } Connection con = null; String driver = "com.mysql.cj.jdbc.Driver"; String url = "jdbc:mysql://" + rhost +":" + lport + "/"; String db = "****"; //分别是数据库名,数据库的用户和密码 String dbUser = "***"; String dbPasswd = "****"; try{ Class.forName(driver); con = DriverManager.getConnection(url+db, dbUser, dbPasswd); try{ Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from hero"); while (rs.next()) { int id = rs.getInt("id");// 可以使用字段名 String name1 = rs.getString(2);// 也可以使用字段的顺序 float hp2 = rs.getFloat("hp"); int damage3 = rs.getInt(4); System.out.printf("%d\t%s\t%f\t%d%n", id, name1, hp2, damage3); //这段可以修改成你自己的数据结构,我这的数据结果见输出 } } catch (SQLException s){ System.out.println("SQL statement is not executed!"); } } catch (Exception e){ e.printStackTrace(); }
//还没写自动关闭连接的代码,偷个懒 } }
输出如下:
335 大英雄1 194.755997 293 336 大英雄2 219.292999 188 337 大英雄3 821.286987 322 338 大英雄4 225.434006 204 339 大英雄5 140.785004 425 345 提莫 313.000000 50 346 提莫 313.000000 50 347 提莫 313.000000 50 348 提莫 313.000000 50 360 sdasd 23.000000 55 361 test 90.000000 60