-
2021-10-07 17:09:47
Android jdbc连接mysql报错解决方案 (Communications link failure)
参考文章:
(1)Android jdbc连接mysql报错解决方案 (Communications link failure)
(2)https://www.cnblogs.com/ben-future/p/10495903.html
备忘一下。
更多相关内容 -
Android JDBC简单使用
2018-11-05 18:04:06一,JDBC 简介 JDBC:java database connectivity java数据库连接 常用的数据库mysql oracle sqlserver sun公司提供了一套jdbc的接口,让数据库厂商实现。 二,JDBC使用: 1,JDBC简单使用 步骤: 1...一,JDBC 简介
JDBC:java database connectivity java数据库连接
常用的数据库mysql oracle sqlserver
sun公司提供了一套jdbc的接口,让数据库厂商实现。
二,JDBC使用:
1,JDBC简单使用
步骤:
1),导入jar包
public class JDBCTest {
@Test
public void jdbcTest() {
try {
// [1]注册mysql驱动
//DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");
// [2]连接数据库
// jdbc:subprotocol:subname
// URL 固定格式: jdbc:数据库名字// localhost:3306/ lol (本地数据库地址),用户名,密码
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/lol", "root", "1q2w3e");
// [3]创建一个statement对象 类似 库管
Statement statement = connection.createStatement();
// [4]执行查询语句
ResultSet resultSet = statement.executeQuery("select * from student");
resultSet.next();
String name = resultSet.getString(2);
System.out.println("name = "+name);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2,JDBC类重要的方法:
【1】DriverManager:注册驱动 告诉当前程序 连接哪个数据库
DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");
获取连接 :“ DriverManager.getConnection("jdbc:mysql:///mydb1", "root", "1q2w3e");
【2】Connection: 连接数据库的对象
获取一个statement connection.createStatement()
获取一个preparedStatement
【3】Statement: 用来执行sql语句 是一个库管对象
接口 Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
方法:
executeQuery(String sql) 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
【4】ResultSet: 结果集对象 里面有一个光标 默认在第一行之前 调用next方法 就可以向下移动
接口 ResultSet: 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
方法:getString(String columnLabel) 以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
executeUpdate(String sql) 执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
为什么使用 Class.forName("com.mysql.jdbc.Driver");创建对象:
// 本身方法也是new Driver。我们用Class去调用免得重复创建对象 Driver 类里自己静态代码块进行加载了自己
3,JDBC简单调用增删改查:
public class JDBCSample {
@Test
public void add() {
//插入语句
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//链接数据库
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/lol", "root", "1q2w3e");
//申请对象类似于库管
Statement statement = connection.createStatement();
int result = statement
.executeUpdate("insert into student values(30,'zhaoyun',99,100)");
if (result > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void remove() {
//删除语句
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/lol", "root", "1q2w3e");
Statement statement = connection.createStatement();
int result = statement
.executeUpdate("delete from student where id > 20");
if (result > 0) {
System.out.println("删除成功" + result);
} else {
System.out.println("删除失败" + result);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void update() {
//更新语句
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/lol", "root", "1q2w3e");
Statement statement = connection.createStatement();
int result = statement
.executeUpdate("update student set english = 100 where id = 30");
if (result > 0) {
System.out.println("更新成功" + result);
} else {
System.out.println("更新失败" + result);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void query() {
//查询语句
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/lol", "root", "1q2w3e");
Statement statement = connection.createStatement();
ResultSet resultSet = statement
.executeQuery("select * from student");
while (resultSet.next()) {
String id = resultSet.getString(1);
String name = resultSet.getString(2);
String english = resultSet.getString(3);
String math = resultSet.getString(4);
System.out.println("id = "+id +" name = "+name + " english = "+english +" math = "+math);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4,JDBC的封装:
[1]创建配置文件:db.properties 存放路径,帐号,密码。
className:com.mysql.jdbc.Driver
url:jdbc:mysql://localhost:3306/lol
name:root
pwd:1q2w3e
[2] 创建Utils getConnection获取对数据库的链接
public class JDBCUtils {
private static String className;
private static String url;
private static String name;
private static String pwd;
static {
try {
//保存本地配置
Properties properties = new Properties();
properties.load(new FileInputStream("db.properties"));
//获取properties 中的字段
className = properties.getProperty("className");
url = properties.getProperty("url");
name = properties.getProperty("name");
pwd = properties.getProperty("pwd");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取
public static Connection getConnection() throws Exception {
Class.forName(className);
return DriverManager.getConnection(url, name, pwd);
}
}
[3] 写SQL语句
public class JDBCUtilsTest {
@Test
public void add() {
try {
Connection connection = JDBCUtils.getConnection();
Statement statement = connection.createStatement();
int result = statement.executeUpdate("insert into student values(30,'machao',99,99)");
System.out.println("result = "+result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
@Test
public void remove() {
try {
Connection connection = JDBCUtils.getConnection();
Statement statement = connection.createStatement();
int result = statement.executeUpdate("delete from student where id = 30");
System.out.println("result = "+result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
@Test
public void update() {
try {
Connection connection = JDBCUtils.getConnection();
Statement statement = connection.createStatement();
int result = statement.executeUpdate("update student set english = 100 where id =20");
System.out.println("result = "+result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
@Test
public void query() {
try {
Connection connection = JDBCUtils.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from student");
while(resultSet.next()){
String id = resultSet.getString(1);
String name = resultSet.getString(2);
String english = resultSet.getString(3);
String math = resultSet.getString(4);
System.out.println("id = "+id +" name = "+name + " english = "+english +" math = "+math);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5,login登陆查询数据库
*BUG,预编译。占位符。进行编译转义。
-
Android使用JDBC连接本地数据库
2016-05-30 15:01:52Android使用JDBC连接本地数据库 -
android JDBC直连mysql
2016-09-23 14:29:27android JDBC直连mysql -
android jdbc直连mysql
2018-01-03 00:31:55有朋友问我怎么做物联网的app,我说一个方式可以直连,另一个用web服务器来跟数据库连接,最后他们决定直...上网找信息结果都是一些错误的比如android 不能直连数据库什么的说法。这些我也不评价了。 这次我用的是androi有朋友问我怎么做物联网的app,我说一个方式可以直连,另一个用web服务器来跟数据库连接,最后他们决定直连数据库。
第二天,朋友说遇到了各种问题,我想不对啊,我以前大二17年的时候很简单就连上了,所以打算给做一个demo。
结果真的遇到了问题,花了4个小时查原因,最后解决了。上网找信息结果都是一些错误的比如android 不能直连数据库什么的说法。这些我也不评价了。
这次我用的是android studio。
1.首先新建项目,helloword就行了。
2.第二步下载JDBC驱动
百度查mysql connector java一般第一个就是了
或者这个链接https://dev.mysql.com/downloads/connector/j/
下载这个就好了
问你是否登个录,你有oracle的账号想登就等吧,懒得登就no thanks。
下载后打开zip
里面的jar包就是编译好的驱动程序了
3.导入驱动进工程
project视图下能看到libs 拖进去就行了
然后加入dependencies
项目视图->项目名->右键->open modle setting(f4)
选择你拖进来的jar包
4.加载驱动并使用
驱动是5.1版本,用的是JAVA JDK1.8
所以要在项目视图->项目名->右键->open modle setting(f4)
设置
并且添加jackOption
本来是直接
Class.forName("com.mysql.jdbc.Driver");//加载驱动 java.sql.Connection cn= DriverManager.getConnection("jdbc:mysql://IP:端口/数据库名","用户","密码");//连接 String sql="select * from a"; Statement st=(Statement)cn.createStatement(); ResultSet rs=st.executeQuery(sql);
结果怎么也连不上排除了防火墙,端口不对,用户远程权限还是无法连接
下面的一个webview是用来测试网络连接的,那时候怀疑是网络问题。
private TextView text1; private WebView webView; private String ip="192.168.31.148"; private Connection connection;
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化空间 TextView text1=(TextView)findViewById(R.id.text1); webView = (WebView)findViewById(R.id.web);//new WebView(this); webView.loadUrl("http://"+ip); //调用loadUrl方法为WebView加入链接 //setContentView(webView); webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { webView.loadUrl(url); //返回值为true的时候控制网页在WebView中打开,为false时调用系统浏览器呀第三方浏览器 return false; } }); //启用支持JavaScript WebSettings settings=webView.getSettings(); settings.setJavaScriptEnabled(true); //WebView加载页面优先使用缓存加载 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://192.168.31.168:3306/test?useUnicode=true&characterEncoding=gbk","test","1234"); //connection = DriverManager.getConnection("jdbc:mysql://192.168.31.168:3306;DatabaseName=test" + "?user=test&password=1234"); //connection = DriverManager.getConnection("jdbc:mysql://192.168.31.168:3306/test?user=test&password=1234"); if (connection!=null) { try { String sql = "select * from user"; //查询表名为“user”的所有内容 Statement stmt = connection.createStatement(); //创建Statement ResultSet rs = stmt.executeQuery(sql); //ResultSet类似Cursor //<code>ResultSet</code>最初指向第一行 Bundle bundle = new Bundle(); while (rs.next()) { bundle.clear(); text1.setText(rs.getString("username")); } rs.close(); stmt.close(); } catch (SQLException e) { } finally { if (connection != null) try { connection.close(); } catch (SQLException e) { } } } } catch (ClassNotFoundException e1) { text1.setText("驱动初始化失败"+e1); } catch (SQLException e1) { text1.setText("数据库链接失败"+e1); } }
网络访问正常,但是JDBC连接不成功,差点我就怀疑官方BUG了,查官方的JDBC驱动包
最后 发现要使用多线程才能连接上,好像是从某个API版本后直连就不支持了,需要用子线程进行连接
code:
private TextView text1;//即hello word那行的 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text1=(TextView)findViewById(R.id.test1);//获取控件 new Thread(new Runnable() {//新建线程 @Override public void run() { try { Log.v("tag","run");//调试信息 Class.forName("com.mysql.jdbc.Driver");//加载驱动 java.sql.Connection cn= DriverManager.getConnection("jdbc:mysql://192.168.31.168:3306/test","test","1234");//连接 String sql="select * from a";//准备语句 Statement st=(Statement)cn.createStatement(); ResultSet rs=st.executeQuery(sql);//执行 while(rs.next()){//遍历结果 final String mybook=rs.getString("name");//查找字段 Log.v("tag",mybook+"");//调试信息 text1.post(new Runnable() {//子线程post方法更新UI,否则会FALUT抛出 @Override public void run() { text1.setText(""+mybook);//更新textview } }); Log.i("Mainactivity",mybook); } cn.close();//记得关闭 不然内存泄漏 st.close(); rs.close(); Log.v("tag","end"); } catch (ClassNotFoundException e) { e.printStackTrace(); text1.setText("驱动初始化失败"+e); } catch (SQLException e) { e.printStackTrace(); text1.setText("数据库链接失败"+e); } } }).start();//执行线程
表里的数据就一个1,用来测试的
完成了,网上很多直连文章都过时了,或者是错误的,也可能是工具原因。
因为本人目前并不写android和java,但是涉略较广,所以一些理解还是比较浅的,欢迎指正。
-
android通过JDBC连接Mysql数据库
2013-06-04 23:25:44android通过JDBC连接Mysql数据库,并将查询结果显示在android手机上. -
Android JDBC无法正常工作:驱动程序上的ClassNotFoundException
2021-06-03 00:25:50Android JDBC无法正常工作:驱动程序上的ClassNotFoundException我正在尝试在我的Android应用程序中使用JDBC连接到远程数据库来执行插入,查询等。我已成功连接并在不同的JAVA项目中完成这些操作。所以我认为既然...Android JDBC无法正常工作:驱动程序上的ClassNotFoundException
我正在尝试在我的Android应用程序中使用JDBC连接到远程数据库来执行插入,查询等。我已成功连接并在不同的JAVA项目中完成这些操作。所以我认为既然Android是Java,我可以直接移植相关代码,为驱动程序添加相同的构建路径等。但它给了我错误:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
我真的不认为这是代码问题,因为相同的代码在Java项目中工作(我只是在main()中执行)。但在此参考它是:String url = "jdbc:mysql://localhost:3306/eventhub_test"; //
String user = "root";
String pass = "";
SQLUtils sqlu = new SQLUtils(url, user, pass);
//我做的SQLUtils类:public class SQLUtils {private String CONNECTION_URL;private String user;private String pass;private java.sql.Statement stmt; private java.sql.Connection conn;public SQLUtils(String conn_url, String user, String pass) {
this.CONNECTION_URL = conn_url;
this.user = user;
this.pass = pass; }public void init() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException {
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(CONNECTION_URL, user, pass);
stmt = conn.createStatement();}}
所以我真的很困惑。JDBC无法与Android一起使用吗?如果是这样,请告诉我我应该考虑远程MySQL数据库访问的替代方案。
谢谢。
-
Android使用JDBC连接mysql数据库 | 学步园
2021-01-25 18:05:39移动设备中常用的数据库时sqlite数据库,Android设备中也不例外,但是今天我们就来讨论一下如何使用Android连接mysql数据库在实际的...在学习android连接Mysql 数据库前,我们先来复习一下java如何通过jdbc连接Mysql... -
android怎么用JDBC方法连接mysql数据库
2021-06-05 06:09:282016-11-21 回答用android程序去直连mysql数据库,觉得这样做不好,出于安全等方面考虑。数据库地址,用户名密码,查询sql什么的都存在程序里,很容易被反编译等方法看到。建议把表示层和数据层逻辑分开,数据层对应... -
Android JDBC不起作用:驱动程序上的ClassNotFoundException
2021-05-27 03:47:36我试图在我的Android应用程序中使用JDBC连接到远程数据库以执行插入,查询等操作。我已经成功连接并在另一个JAVA项目中完成了这些操作。因此,我认为由于Android是Java,因此我可以移植相关代码,为驱动程序添加相同... -
在Android Studio 中使用JDBC
2021-06-04 17:57:26在 Android 中进行数据库操作主要有两种方式,一种是使用 Android Database,另一种就是使用 JDBC。JDBC 非常类似于 ODBC,但 ODBC 是面向 C 语言的。在 Android Studio 中使用 JDBC 非常简便。接下来,本文以 MySQL... -
android 通过jdbc连接sql server 2008实现 增,删 改 查功能
2014-11-06 10:16:12android 通过jdbc连接sql server 2008实现 增,删 改 查功能 -
使用JDBC从Android连接到MySQL
2021-06-05 01:27:21侃侃无极这段代码永久运行!由diko(土耳其)创建public void mysql() { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } thrd1 = new Thread(ne... -
android通过JDBC连接MySQL数据库
2019-01-16 14:14:30先去MySQL官网下载jar包,https://dev.mysql.com/downloads/connector/j/,本来mysql官网已经发布8.0的了,但是8.0的jar包必须得用android8.0以上的系统才能调试,所以这里选择5.0的版本,点击下面红色框下载好 ... -
Android JDBC Oracle查询返回正确的行数,但没有数据
2021-05-04 07:19:37我试图通过SQLite的android手机与局域网上的oracle服务器之间的JDBC连接来执行数据同步。我可以通过手机连接到服务器,并进行查询。我可以用oracle数据库中正确的行数返回结果集,但列中的所有数据都有一个空值。我... -
android使用jdbc连接mysql问题
2021-05-31 00:57:29android使用jdbc连接mysql问题 起初使用java程序连接过mysql,以为安卓开发中也一样,实际遇到了很多问题。 建议检查以下几个问题: 1.数据库是否可以远程访问 2.驱动版本(建议下载较低的版本) 3.安卓网络权限设置... -
android jdbc连接MySQL失败
2021-01-30 21:42:10编译器:Android studio 数据库:MySQL 8.0.23 jar包:mysql-connector-java-8.0.23.jar[img=https://img-bbs.csdn.net/upload/202101/30/1612014129_364129.png][/img][img=... -
Android:使用JDBC连接MySql
2021-01-19 10:32:14我现在正在努力解决一个问题 .... DB是MySql . 我从here导入了数据库连接的jar文件 . 我已将其作为gradle中的依赖... 我可以使用它来存储数据库并使用JDBC检索我的Android应用程序上的数据吗? 我正在尝试的方式是否正确? -
Android 使用JDBC连接数据库
2017-01-13 11:33:42在大多数Android项目中,数据的读取和保存都是通过调用服务器的接口来实现的,所以对于本地数据库的操作是很少的。但是,在前段时间的项目中,客户提出了要直接连接服务器上的数据库来操作数据,这对于一个Android... -
使用JDBC驱动程序和android进行Sql数据库连接
2021-06-07 17:52:22我正在尝试使用android应用中的JDBC连接到SQL Server。我将sqljdbc4.jar导入到我的应用程序中,但是当我进入conn = DriverManager.getConnection(connString);我得到以下错误:连接字符串是jdbc:sqlserver://xxx.... -
android通过jdbc远程连接SQL Server 并实现增删改查源码 jtds 1.3.1
2021-06-09 09:36:43jtds 1.3.1下载http://pan.baidu.com/s/1eRoOETO 源码(网上下载的,我测试了一下,成功):package com.androidmysqltest;import java.sql.Connection;import java.sql.DriverManager;...import android.... -
安卓SQLite数据库相关-基于android平台通过JDBC连接MySQL数据库实现增删查改操作.rar
2019-07-29 16:16:01基于android平台,通过JDBC连接MySQL数据库,实现增删查改操作.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
Android Firebird JDBC Driver Port:firebird jdbc驱动(Jaybird)的Android端口-开源
2021-07-07 23:37:15这是火鸟 jdbc 驱动程序(Jaybird)的一个端口:http://www.firebirdsql.org/en/jdbc-driver/ -
如何使用 JDBC 从 Android 读取 MySQL 数据?
2022-01-14 13:12:14此示例向您展示如何直接从 Android 连接和读取 MySQL 数据库中的数据。以下步骤和代码片段将向您展示如何做到这一点。 将 MySQL JDBC 驱动程序添加到您的项目依赖项中。打开app/build.gradle文件并添加依赖项。 .... -
Android jdbc第二次获取connection为空
2020-11-04 21:32:25而且同样的代码,同样的jdbc复制粘贴放在Java里正常,放在Android里就不行。 debug到DriverManager.getConnection("jdbc:mysql://" + ip + ":"+port+"/" + dbName,dataBaseUserName, dataBasePassWord); 进jdbc的... -
【Android】入门案例(二)——JDBC连接MySql数据库实现登录
2018-11-21 18:34:43在上文Android入门案例(一)——简单登录中,...在Android工程中要使用jdbc的话,要导入jdbc的外部jar包,可去官网下载,也可以百度自行下载 2.导入jar包 方式一:可以在项目的build.gradle文件中直接添加如下语... -
Android + jdbc连接云服务器的MySQL并采用ListView查看数据
2021-05-05 20:26:45工具:Android Studio,阿里云服务器ECS上部署的MySQL,mysql-connector-java-5.1.47.jar 问题描述:用putty远程连接云服务器的MySQL,可以操作其数据的增删查改,但是现在需要在手机端进行对数据库MySQL的操作,... -
安卓SQLite数据库相关-Android使用JDBCSSH连接外网数据库.rar
2019-07-29 16:15:58Android使用JDBC SSH连接外网数据库.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
sqlite-jdbc1
2021-06-05 03:57:20SQLite JDBC Driver SQLite JDBC, developed by Taro L. Saito, is a library for accessing and creating SQLite database files in Java.Our SQLiteJDBC library requires no configuration since native librari....