由于我只能通过PHP脚本使用我的Webhoster中的数据库,因此想知道如何使脚本连接成为可行的
PHP:
<?php
$query=$_POST["query"];
echo" Query = ".$query."\n";
if($query){
$link=mysql_connect("localhost:3306","user","password");
if($link){
mysql_select_db("learnEng");
$result=mysql_query($query);
if($result){
while($row=mysql_fetch_row($result)){
foreach($row as $value){
echo "\t".$value;
}
echo"\n";
}
}
}else{
echo " MySQL connect failed ! \n";
}
}else{
echo " No Query ! \n";
}
exit();
?>
目前我正在使用这样的Java-Connections(使用H2):
Connection conn = null;
String db = "~/testDB";
String dbUser = "user";
String dbPass = "password";
Class.forName("org.h2.Driver");
conn = DriverManager.getConnection("jdbc:h2:tcp://"+h2IP+"/" + db, dbUser, dbPass);
经过一些研究后我发现代码:
HttpURLConnection conn=null;
try{
URL url=new URL("http://www.example.net/database.php");
String agent="Applet";
String query="query=" + "create table test(name varchar(255), id int);";
String type="application/x-www-form-urlencoded";
conn=(HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty( "User-Agent", agent );
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length", ""+query.length());
OutputStream out=conn.getOutputStream();
out.write(query.getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while((inputLine=in.readLine())!=null){
System.out.print(inputLine+"\n");
};
in.close();
int rc = conn.getResponseCode();
System.out.print("Response Code = "+rc+"\n");
String rm=conn.getResponseMessage();
System.out.print("Response Message = "+rm+"\n");
}catch(Exception e){
e.printStackTrace();
}finally{
conn.disconnect();
}
执行后,我在Eclipse控制台中使用上面的php-Code获得以下响应:
Query =
No Query !
Response Code = 200
Response Message = OK
是否有人能够告诉我发生了什么以及如何让它发挥作用?
亲切的问候 AMC
答案 0 :(得分:0)
我前段时间的情况相同。 Web主机不允许直接访问mySQL数据库,但允许使用PHP脚本。
看看MySQLTunnel。它不是JDBC,而是HTTP(S)将查询作为URL编码的“查询”参数并将结果作为JSON提供。因此,使用适当的粘合代码,您可以使用它代替普通的JDBC连接。
但在您走这条路之前,请务必了解该方法引发的安全问题。您不希望坏人获得对您的数据的读写权限,是吗?