Java通过PHP脚本连接到MySQL

时间:2018-01-15 08:41:28

标签: java php mysql

由于我只能通过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

1 个答案:

答案 0 :(得分:0)

我前段时间的情况相同。 Web主机不允许直接访问mySQL数据库,但允许使用PHP脚本。

看看MySQLTunnel。它不是JDBC,而是HTTP(S)将查询作为URL编码的“查询”参数并将结果作为JSON提供。因此,使用适当的粘合代码,您可以使用它代替普通的JDBC连接。

但在您走这条路之前,请务必了解该方法引发的安全问题。您不希望坏人获得对您的数据的读写权限,是吗?